在同步 b/w 两个 sql server 2005 db 时解决标识列主键冲突
Posted
技术标签:
【中文标题】在同步 b/w 两个 sql server 2005 db 时解决标识列主键冲突【英文标题】:Resolve Identity column primary key conflict while sync b/w two sql server 2005 db 【发布时间】:2012-07-15 12:10:43 【问题描述】:我有两个 sql server 2005 数据库 - ParentDB
和 ChildDB
,我想使用同步框架 2.1 同步它们ParentDB
在服务器上,ChildDB
在客户端 m/c 上。 ParentDB
中有很多表,但ChildDB
上的表很少,可以说,Customer
表在两个数据库之间很常见,Id (column)
作为主键设置为自动递增,我想同步这个表,我我正在使用以下 msdn example 中给出的方法。这种方法有效,除非我只从服务器下载或上传到服务器。
让我们来看一个场景:
1.服务器表有一行Id=52
2. 两个数据库同步
3. 现在在ParentDB
in Customer
table 上插入一行 Id=53
4. 同时在Customer
表的ChildDB
上插入另一行,ID=53(因为两个表都有自动增量)
现在,当我同步两个表时,两行中的任何一个都会被覆盖,具体取决于同步的方向。
我想要的是调整Id
,并保留两行,
我应该怎么做才能解决这种冲突,如果可能,请提供伪代码。 附言: 我希望当我们考虑外键约束时,场景会变得更加复杂。 提前谢谢
【问题讨论】:
【参考方案1】:不建议在同步环境中使用 Identity 列作为 PK(甚至不使用 Sync Framework)(参见Selecting an Appropriate Primary Key for a Distributed Environment,原因与您已经发现的相同。
如果您可以更改架构,我建议您使用不同的 PK(Guid 或 Int + ClientId)
【讨论】:
以上是关于在同步 b/w 两个 sql server 2005 db 时解决标识列主键冲突的主要内容,如果未能解决你的问题,请参考以下文章
使用Red Gate Sql Compare 数据库同步工具进行SQL Server的两个数据库的结构比较同步