问题
如何避免客户端/服务器数据库中的主键冲突
背景
我正在同步多个数据库。我有一个中央 SQL Server 数据库和许多客户端 SQL Server 数据库。现在说我在数据库中有一个表 X,它有一个主键 ID。
在第一个客户端中,我们在表 X 中有以下 ID:
X(客户端 1)
--------
1|SomeValue
2|SomeValue
3|SomeValue
4|SomeValue
在第二个客户中,我有
X(客户端 2)
--------
1|SomeValue
2|SomeValue
3|SomeValue
4|SomeValue
当我同步时,我希望客户端只上传他们的数据而不是下载它们。
现在,当我将第一个客户端与服务器同步时,它将添加来自 (1 .. 4) 的主键。但是,当我与第二个客户端同步时,会出现 PRIMARY KEY CLASH。我怎么解决这个问题?
我正在使用 SQL Server 2008 R2、同步框架和 C#。
我已经考虑过使用 GUID 作为主键的想法,这在我的情况下是不可行的,因为我正在处理旧数据库。此外,重新播种 IDENTITY 值的想法有点容易出错。如何在不插入值的情况下增加标识列?PS:主键设置为 IDENTITY,增量为 1。