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

Sql 需要解释对象错误中无法插入重复的键行,sql,sql-update,key,duplicates,uniqueidentifier,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-a1a

我正在做:

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

        uid                            |  intStatus 
-------------------------------------- +---------------
'a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1  | 10
然后我需要做一个更新,我需要该uid的intStatus为18。因此,我:

UPDATE dbo.MYTABLE  SET intStatus = 18 
WHERE 
intStatus = 10 and uid = 'a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1'
这里是我得到错误的地方:

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

谁能告诉我为什么我会犯这个错误?我怎样才能解决它

uid是MYTABLE的主键

intStatus是一个非空的int


非常感谢

您可能已经有一行的intStatus为18,uid为“a1a1…”

尝试运行并查看您是否已经拥有尝试使用更新创建的行:

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

可能您已经有一行具有intStatus 18和uid“a1a1…”

尝试运行并查看您是否已经拥有尝试使用更新创建的行:

SELECT uid, 
       intStatus 
  FROM dbo.MYTABLE 
 WHERE intStatus = 18 
   AND uid = 'a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1'
intStatus是唯一的 这就是mysql抛出错误的原因

如果要执行该查询,intStatus不应是唯一的

intStatus是唯一的 这就是mysql抛出错误的原因


如果要执行查询,则intStatus不应是唯一的

如果uid是主键,则根据定义它是唯一的,因此intStatus条件是不相关的。这应该起作用:

UPDATE dbo.MYTABLE  SET intStatus = 18 
WHERE  uid = 'a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1';
如果这不起作用,那么您可以使用组合两列的复合键,而不是单个列键


如果uid是主键,那么它在定义上是唯一的,因此intStatus条件是不相关的。这应该起作用:

UPDATE dbo.MYTABLE  SET intStatus = 18 
WHERE  uid = 'a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1';
如果这不起作用,那么您可以使用组合两列的复合键,而不是单个列键


在数据库设计中,有一些东西不允许该表中重复的intStatus值,并且还有另一个值为18的记录。解决这个问题的方法是找出为什么不允许重复。可能有一个很好的理由。然后,您必须再看一看您试图实现的目标。错误状态为ixMYTABLE唯一索引。这个唯一索引的组成是什么?uid是uniqueidentifier主键不为null,intStatus是一个int不为null。您可以发布用于创建表的脚本吗?请同时包括索引和约束创建。是否解决了此问题?我也遇到了同样的问题,我无法缩小范围来说明我的PK在哪里被复制。在您的数据库设计中,有一个地方不允许在该表中重复intStatus的值,并且,还有另一个值为18的记录。解决这个问题的方法是找出为什么不允许重复。可能有一个很好的理由。然后,您必须再看一看您试图实现的目标。错误状态为ixMYTABLE唯一索引。这个唯一索引的组成是什么?uid是uniqueidentifier主键不为null,intStatus是一个int不为null。您可以发布用于创建表的脚本吗?请同时包括索引和约束创建。是否解决了此问题?我也有同样的问题,我不能缩小到我的PK被复制的位置intStatus 18和uid'a1a1-a1a1-a1a1-a1a1-a1a1-a1a1'没有行如果uid是键,即使使用更新,也不能有重复的值。唯一键表示任何时候只有一行具有给定值。intStatus 18和uid'a1a1-a1a1-a1a1-a1a1-a1a1-a1a1-a1a1-a1a1'没有行如果uid是键,即使使用更新,也不能有重复的值。唯一键表示在任何时间只有一行具有给定值。intStatus是int非null intStatus是int非null