如何处理数据迁移脚本中的唯一约束违规?

时间:2013-04-24 18:55:07

标签: sql-server sql-server-2008 insert constraints unique-constraint

这里我试图将一些数据从表列迁移到一个全新的表,其中目标列具有唯一约束。基本上我是想:

INSERT INTO FooTable VALUES (SELECT BarTable.Code FROM BarTable)

FooTable只有2列:ID和Code(具有唯一约束的列)。

但是在BarTable.Code上,可能有一些重复的值我需要处理它们并使它们适合新约束(可能是:Code = Code + 1或者其他)。

关于如何做到这一点的任何想法?

我正在使用MS SQL Server 2008 R2。

提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用MERGE命令,并在代码匹配时插入不同的记录。

以下是基于您的方案的示例:

MERGE FooTable AS T
USING BarTable AS S
ON (T.Code = S.Code) 
WHEN NOT MATCHED BY TARGET 
    THEN INSERT(Code) VALUES(S.Code)
WHEN MATCHED 
    THEN INSERT(Code) VALUES(S.Code+1)

答案 1 :(得分:0)

您可以使用Not Exists

INSERT INTO FooTable VALUES (SELECT distinct br.Code FROM BarTable br where NOT EXISTS(SELECT * FROM FooTable bs where br.code=bs.code  ) )