2011-01-28 49 views
1

我有两个在表中相同的记录(由错误输入)。这两个ID都用作其他表中的外键。我想将外键更新为一个“orignal”元素并删除另一个。问题在于外键的UPDATE可能会生成约束异常(如果具有原始元素的外键已经存在)。SQL Server:将ID更改为已有的(合并)如何?

所以我会做这样的事情:

UPDATE foreignTable SET id=1 WHERE id=2 
DELETE FROM firstTable WHERE id=2 

的问题是与UPDATE,我愿做更新,如果该行不已经存在,如果是刚删除的行。你是怎样做的?

回答

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 
+0

谢谢,它的工作!对于某些表格,我不得不添加第三个键。 – tink01 2011-02-01 15:38:05

0

如果您使用的是SQL Server 2008,请查看MERGE语句。

它允许您插入缺失的行,更新现有的行并删除那些必须删除的行。

http://technet.microsoft.com/en-us/library/bb510625.aspx

如果您使用的是旧版本,你将有你的数据从现有复制到一个临时表,删除数据,并从临时表重新插入。

务必使用事务并对表进行备份以避免数据丢失。