在同步b / w两个sql server 2005 db时解决Identity列主键冲突

时间:2012-07-15 12:10:44

标签: c# sql-server-2005 sql-server-express microsoft-sync-framework

我有两个sql server 2005数据库 - ParentDBChildDB,我想使用同步框架2.1进行同步 ParentDB位于服务器上,ChildDB位于客户端m / c上。 ParentDB中有很多表但ChildDB上的表很少,可以说,Customer表在db Id (column)作为主键设置为自动递增的情况下很常见,并且我想同步这个表,我正在使用以下msdn example中给出的方法。这个appraoch工作,除非我只从服务器下载或上传到服务器。

让我们看一个场景:
1.服务器表上有一行Id = 52 2.两个数据库都是同步的 3.现在ParentDBCustomer表格中插入一行,ID = 53 4.同时在ChildDB Customer表中插入另一行,其中Id = 53(因为两个表都有自动增量) 现在当我同步两个表时,两个行中的任何一个都被覆盖,具体取决于同步的方向 我想要的是调整Id,并保留两行

我该如何解决此类冲突,如果可能请提供伪代码 附: :我希望当我们考虑外键约束时,场景会变得更复杂 Thnx提前

1 个答案:

答案 0 :(得分:2)

不建议在同步环境中使用Identity列作为PK(甚至不使用Sync Framework)(请参阅Selecting an Appropriate Primary Key for a Distributed Environment,原因与您已经发现的相同。

如果您可以更改架构,我建议您使用不同的PK(Guid或Int + ClientId)