SQL Server:将ID更改为已存在的ID(合并)如何?

时间:2011-01-28 16:31:24

标签: sql sql-server

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

所以我会这样做:

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

问题在于UPDATE,如果行尚未存在,我想进行UPDATE,如果是,则只删除该行。你是怎样做的?

2 个答案:

答案 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

如果您使用旧版本,则必须将数据复制到临时表,从现有数据中删除数据并从临时表重新插入。

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