SSIS数据迁移主键身份冲突

时间:2011-01-13 17:18:44

标签: sql ssis data-migration

我们已经开发了从一个数据库模式到另一个数据库模式的大型数据迁移。我们基于目标数据库为空的想法构建了它,但几个月前我们开始将客户端放在新应用程序上,这意味着他们的数据被放置在新模式(目标数据库)中。

现在我们处于主键可能从源重叠到目标数据库的情况,我们正在努力想出一个解决方案。我能想到的唯一解决方案是检查目标中是否存在ID,将源中的ID更新为目标中最大ID的1,然后迁移记录。对于数百个表来说,这似乎非常麻烦。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

抱歉,我对SSIS一无所知,但以下是使用SQL解决问题的几种方法。

插入目标表时,请勿插入标识。插入行时,在映射表中捕获新插入的标识和旧标识,请参阅MERGE + OUTPUT INTO。使用映射表更新尚未插入的表,用新身份替换旧身份。

当然,为了实现这一点,必须按照不会导致外键或约束违规的顺序插入表中。

如果您没有完成所有这些操作,并且可以在短时间内将用户锁定在桌面之外,则可以使用DBCC CHECK INDENT来“保留”身份。然后可以使用这些新标识更新旧数据,然后使用SET IDENTITY_INSERT ON进行插入。