我在两台不同的机器上运行相同的数据库。 DB广泛使用Identity列,表格发生了相当大的冲突。我现在想把这两个合并在一起,然后整理出我可能做的不正当的问题
A)使用GUID(unweildy但无处不在) B)分配标识范围,类型为naff,但意味着你仍然可以按顺序访问记录,敲击基本的Sql并轻松选择记录,并识别哪台机器发起了数据。
我的问题是,在其中一个数据库上重新键入(即更改主键)的最佳方法是什么,这样数据就不会再发生冲突了。我们只查看总共6个表,但是3个表中有很多行~2M。
更新 - 是否有任何真正的sql代码可以做到这一点,我知道Identity Insert等。之前我已经以一些优雅的方式解决了这个问题,我一直在寻找优雅的解决方案,更可取的有一个很好的TSQL SP来做驴工作 - 如果不存在我会编码并放在wiki上。
答案 0 :(得分:0)
一种简单的方法是以固定的增量(例如10,000,000)更改其中一个数据库上的所有键,它们将排成一行。为此,您必须关闭应用程序以使数据库保持安静并删除受此影响的所有FK引用,并在完成后重新创建它们。您还必须将所有受影响的标识列上的种子值重置为适当的值。
某些表格将是参考数据,如果它不同步,合并将更加复杂。您可能会遇到冲突代码的问题,这意味着不同实例上的相同内容或具有不同含义的相同代码。这可能是您的应用程序的问题,也可能不是,但如果实例运行时没有在它们之间进行协调,您可能需要仔细检查这一点。
此外,如果没有这些的规范来源,名称和地址等数据非常可能会不同步。您可能需要解决这些问题,运行匹配的查询并让业务整理任何异常。
答案 1 :(得分:0)
我会首先在表格中添加另一列,然后使用新的Primary key
填充该列。
然后我使用update语句更新所有相关表中的新foreign key
字段。
然后,您可以删除旧的Primary key
和旧foreign key
字段。