0

我花了一天时间尝试调试问题,直到现在我才知道问题一直存在。我的表有一个唯一约束,它只强制唯一值作为目录号。但是,我似乎对在这种情况下构成独特性的内容没有很好的理解。我有两个产品编号MP1156MP1156ZF

Insert into IDWProductCodes( PRCEAN, PRCGTIN, PRCatalogNumber, PRCIsActive, PRIsReplaced, PrIsREPlacement,PRProductID)
   Select 
      '11232', '23223', 'MP115BP', 1, 0, 0, '267F104C-6BA4-4C7E-A0C1-6615CBB9DA4C'

Insert into IDWProductCodes( PRCEAN, PRCGTIN, PRCatalogNumber, PRCIsActive, PRIsReplaced, PrIsREPlacement,PRProductID)
   Select 
      '11232', '23223', 'MP115', 1, 0, 1, '267F104C-6BA4-4C7E-A0C1-6615CBB9DA4C'

Insert into IDWProductCodes( PRCEAN, PRCGTIN, PRCatalogNumber, PRCIsActive, PRIsReplaced, PrIsREPlacement,PRProductID)
   Select
      '11232', '23223', 'MP15', 1, 1, 1, '267F104C-6BA4-4C7E-A0C1-6615CBB9DA4C'

我收到一个错误:

消息 2627,级别 14,状态 1,第 5 行
违反 UNIQUE KEY 约束“UK_CNUMUNIQUE”。无法在对象“dbo.IDWProductCodes”中插入重复键。重复键值为 (MP115)。

发生的事情是每次我插入第一个键然后尝试插入第二个键时,SQL 假定它们是相同的并用第二个覆盖第一个键,这是我根本不想要的效果。

我真正想要的是能够在表格中输入不同的字符串(不重复)。我原以为只需要一个独特的约束,但现在我不确定。请问解决这个问题的更好或最好的方法是什么?

4

2 回答 2

0

其他事情正在发生。SQL Server 不会将两个字符串“MP115”和“MP115BP”混淆为相同的值。您已多次被要求编写表格结构的脚本,以便我们可以看到它。您可以使用 SSMS、右键单击表和Script Table As > CREATE to > Clipboard 来执行此操作。如果您发布结果,我们可能会提供更多帮助。

然而,这是一个疯狂的猜测。您是否可能在表中有一个计算机列将 PRCatalogNumber 截断为 5 个字符,并且它本身有不同的 UNIQUE INDEX?这将导致您看到的问题。

于 2012-10-16T02:31:50.687 回答
0

我认为您误解了正在发生的事情。如果您尝试插入重复项,SQL 唯一约束不会导致覆盖现有行。违反约束的第二次插入将失败。

请显示您用于插入和表结构的代码。看到后,我将修改此答案以解决真正的问题,但是根据您提供的信息,唯一约束不是问题。

另外,请确保您在该表上没有 TRIGGER。这是我能想到的唯一会产生像插入替换现有行这样的不稳定行为的事情。

于 2012-10-16T00:20:35.440 回答