2

我正在做:

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

万分感谢!

4

3 回答 3

0

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

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

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

有关主键和组合的信息

于 2013-10-10T14:37:39.540 回答
0

可能您已经有 intStatus 18 和 uid 'a1a1...'

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

SELECT uid, 
       intStatus 
  FROM dbo.MYTABLE 
 WHERE intStatus = 18 
   AND uid = 'a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1'
于 2013-10-10T13:19:30.577 回答
-1

intStatus 是独一无二的,这就是 mysql 抛出错误的原因。

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

于 2013-10-10T13:25:22.647 回答