需要解释无法在对象错误中插入重复的键行

时间:2013-10-10 13:15:55

标签: sql sql-update key duplicates uniqueidentifier

我在做:

SELECT uid, intStatus from dbo.MYTABLE 
WHERE 
intStatus = 10 and uid = 'a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1'

我得到了:

        uid                            |  intStatus 
-------------------------------------- +---------------
'a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1  | 10

然后我需要做一个更新,我需要intStatus为18的uid。所以我这样做:

UPDATE dbo.MYTABLE  SET intStatus = 18 
WHERE 
intStatus = 10 and uid = 'a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1'

这就是我收到错误的地方:

无法在对象'dbo.MYTABLE'中插入具有唯一索引'ixMYTABLE'的重复键行。

请有人,请告诉我为什么我收到此错误?我该如何解决?

uid是MYTABLE的主键

intStatus是一个非null int

非常感谢!

3 个答案:

答案 0 :(得分:0)

可能你已经有了一行intStatus 18和uid'a1a1 ......'

尝试运行并查看您是否已经尝试使用UPDATE创建的行:

SELECT uid, 
       intStatus 
  FROM dbo.MYTABLE 
 WHERE intStatus = 18 
   AND uid = 'a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1'

答案 1 :(得分:0)

如果uid是您的主键,那么根据定义它是唯一的,因此intStatus条件无关紧要。这应该有效:

UPDATE dbo.MYTABLE  SET intStatus = 18 
WHERE  uid = 'a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1';

如果这不起作用,那么您可以使用组合两列而不是单列键的复合键。

Info on primary keys and composites

答案 2 :(得分:-1)

intStatus是唯一的 为什么mysql会抛出错误。

如果你想执行那个查询,intStatus不应该是唯一的