【问题标题】:INSERT statement runs correctly but throws a 'violation of PK contstraint' error?INSERT 语句运行正确但抛出“违反 PK 约束”错误?
【发布时间】:2019-09-16 02:37:56
【问题描述】:

我在Products 表中插入第一个产品。我的回答语句工作正常,但我违反了主键约束:

无法在对象中插入重复键。重复键值为 [...]。

记录插入正确,但它还在我插入的记录上方插入“0”记录。不知道发生了什么。

我看不出我的插入语句在哪里出错,我基于 sqlservertutorial.net 的插入语句。不知道怎么回事。

INSERT INTO products (code, P_Name, p_line, P_Collection, P_Colour,
                      P_Size, P_Price, active)
VALUES ('17881832980551', 'Austin Record', 'T-Shirt', 'Classic', 'Athletic Heather',
        'S', '39.50', 'Y');

Products 表中的 Code 列是主键。

记录已按预期正确插入,但我还插入了一个额外的“0”记录,以及以下错误消息:

(受影响的 2 行)

消息 2627,第 14 层,状态 1,第 3 行
违反主键约束“PK__Products__A25C5AA60C388384”。无法在对象“dbo.Products”中插入重复键。重复键值为(17881832980551)

【问题讨论】:

  • 有触发器吗?
  • 所以要澄清一下,在您运行上述语句之前,表中没有记录?运行语句后,表中有 2 条记录?您是否验证过该记录不存在,例如select * from dbo.Products
  • 因为看起来它曾经为您工作过,然后因为您对 PK 进行了硬编码而失败。
  • 附注:如果您要插入 numerical 值(如 CodePrice),您应该输入这些值值到单引号 - 这是不必要的,并导致 T-SQL 必须进行隐式类型转换......
  • 您解决了这个问题吗?否则请分享您的产品表的表结构。需要检查为什么要插入其他记录

标签: sql-server tsql


【解决方案1】:

试试这个

IF Not EXISTS(SELECT TOP 1 * FROM products WHERE code = '17881832980551')
BEGIN
     INSERT INTO products (code, P_Name, p_line, P_Collection, P_Colour,
                      P_Size, P_Price, active)
      VALUES ('17881832980551', 'Austin Record', 'T-Shirt', 'Classic', 'Athletic Heather',
        'S', '39.50', 'Y');
END
ELSE
BEGIN
     SELECT 'Record already added'
END

【讨论】:

  • 大家好,现在才看到这些。很多很棒的反馈和答案,非常感谢,因为我刚刚开始使用 SQL。该表是空的,当我尝试插入我的第一条记录时收到错误消息。今晚下班后我会调查一下,让你知道它是否有效!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多