我有两张在表格中相同的记录(错误输入)。两个ID都用作其他表中的外键。我想将外键更新为一个“orignal”元素并删除另一个。问题是外键的UPDATE可能会生成约束异常(如果具有原始元素的外键已经存在)。
所以我会这样做:
UPDATE foreignTable SET id=1 WHERE id=2
DELETE FROM firstTable WHERE id=2
问题在于UPDATE,如果行尚未存在,我想进行UPDATE,如果是,则只删除该行。你是怎样做的?
答案 0 :(得分:0)
UPDATE ft
SET id = 1
FROM foreignTable ft
LEFT JOIN foreignTable ft2
ON ft.PrimaryKey = ft2.PrimaryKey
AND ft2.id = 1
WHERE ft.id = 2
AND ft2.PrimaryKey IS NULL
DELETE FROM foreignTable
WHERE id = 2
答案 1 :(得分:0)
如果您使用的是SQL Server 2008,请查看MERGE语句。
它允许您插入缺失的行,更新现有的行并删除那些必须删除的行。
http://technet.microsoft.com/en-us/library/bb510625.aspx
如果您使用旧版本,则必须将数据复制到临时表,从现有数据中删除数据并从临时表重新插入。
请务必使用事务并对表进行备份以避免数据丢失。