我正在尝试将SQL Server 2005中的一个字段从一个表更新到另一个表中的另一个字段,并且我完全违反了UNIQUE KEY约束,我似乎无法弄清楚它出错的地方用我的脚本。这是我到目前为止所做的:
UPDATE table1
SET column1 = (SELECT table2.column2
FROM table2 INNER JOIN
table1 ON table1.id = table2.id)
我对SQL很新,并且肯定会喜欢这种情况的一些输入。非常感谢你!
答案 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);