违反UNIQUE KEY约束'UK_XXX'。无法在对象'dbo.YYY'中插入重复键

时间:2012-08-07 17:52:33

标签: sql sql-server-2005

我正在尝试将SQL Server 2005中的一个字段从一个表更新到另一个表中的另一个字段,并且我完全违反了UNIQUE KEY约束,我似乎无法弄清楚它出错的地方用我的脚本。这是我到目前为止所做的:

UPDATE table1
SET column1 = (SELECT table2.column2
FROM         table2 INNER JOIN
                  table1 ON table1.id = table2.id)

我对SQL很新,并且肯定会喜欢这种情况的一些输入。非常感谢你!

1 个答案:

答案 0 :(得分:4)

这种语法似乎更清晰,但您需要验证table2.column2中的值是唯一的。

UPDATE t1 
  SET column1 = t2.column2
    FROM dbo.table1 AS t1
    INNER JOIN dbo.table2 AS t2
    ON t1.id = t2.id;

假设table1.column1具有唯一约束,并且该id是每个表中的主键,您可以先检查潜在的违规。这将告诉您源表中的column2中是否存在dupes:

SELECT column2
  FROM dbo.table2
  WHERE id IN (SELECT id FROM dbo.table1)
  GROUP BY column2
  HAVING COUNT(column2) > 1;

这将告诉您table2中是否有单个值与其他行冲突,这些行在两个表之间不常见:

SELECT t2.column2
  FROM dbo.table2 AS t2
  WHERE EXISTS (SELECT 1 FROM dbo.table1 AS t1
    WHERE t1.column1 = t2.column2
    AND t2.id <> t1.id);