1

我在两台不同的机器上运行相同的数据库。数据库广泛使用身份列,并且这些表发生了非常可怕的冲突。我现在想将这两者合并在一起,然后再解决我可能会做的根本问题

A) 使用 GUID(笨拙但无处不在) B) 分配身份范围,有点像 naff,但意味着您仍然可以按顺序访问记录,敲击基本 Sql 并轻松选择记录,它可以识别哪台机器源自数据。

我的问题是,在其中一个数据库上重新键入(即更改主键)以使数据不再发生冲突的最佳方法是什么。我们只查看总共 6 个表,但 3 个表中有很多行 ~ 2M。

更新 - 是否有任何真正的 sql 代码可以做到这一点,我知道 Identity Insert 等。我之前已经以多种不优雅的方式解决了这个问题,我一直在寻找优雅的解决方案,最好有一个不错的解决方案TSQL SP 来完成这项工作——如果不存在,我会将其编码并放置在 wiki 上。

4

2 回答 2

0

我会先在表中添加另一列,然后用新的Primary key.

然后我会使用更新语句来更新foreign key所有相关表中的新字段。

然后你可以删除旧的Primary key和旧的foreign key字段。

于 2015-01-21T06:37:25.027 回答
0

一种简单的方法是将其中一个数据库上的所有键更改为固定增量,例如 10,000,000,然后它们将对齐。为此,您必须关闭应用程序以使数据库安静下来并删除所有受此影响的 FK 引用,并在完成后重新创建它们。您还必须将所有受影响的标识列上的种子值重置为适当的值。

一些表将是参考数据,如果不同步,合并起来会更复杂。您可能会遇到冲突代码的问题,这些代码在不同的实例上意味着相同的事物,或者相同的代码具有不同的含义。这可能是您的应用程序的问题,也可能不是问题,但如果实例在运行时没有在它们之间进行协调,您可能需要仔细检查这一点。

此外,如果没有规范的来源,姓名和地址等数据很可能会不同步。你可能需要把这些弄出来,运行一个匹配的查询,让企业整理任何异常。

于 2009-01-21T10:31:01.873 回答