2011-01-13 78 views
1

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

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

+0

是否有可能只有两组表视图加入?在插入记录时开始编辑PK通常不是一个好主意 - 很长一段时间你会遇到级联数据完整性问题。 – JNK 2011-01-13 18:04:39

回答

2

对不起,我不知道SSIS的任何内容,但以下几种方法可以解决使用SQL的问题。

当插入到目标表中时,不要插入标识。在插入行时,在映射表中捕获新插入的标识和旧标识,请参阅MERGE + OUTPUT INTO。使用映射表来更新尚未插入的表格,用旧的标识替换旧的标识。

当然,为了这个工作,插入到表中必须按照不会导致外键或违反约束的顺序完成。

如果您不做所有这些工作,并且您可以在短时间内锁定用户,DBCC CHECK INDENT可用于“保留”身份。然后可以使用这些新身份来更新旧数据,然后使用SET IDENTITY_INSERT ON进行插入。