【发布时间】:2021-09-14 06:36:47
【问题描述】:
我在 4 个不同的位置有 4 个数据库。我写了一个程序来互相同步。该程序最多可在 2 个位置正常工作。我会解释原因。
每个数据库都有每个表的身份主键。如果我只配置了两个数据库。我可以将第一个数据库的身份设置为 IDENTITY(1,1),将另一个数据库设置为 IDENTITY(-1,-1)。但是如果有多个位置,那么我将不得不为每个数据库遵循一些模式。喜欢,
1st - Identity(1,5)
2nd - Identity(2,5)
3rd - Identity(3,5)
........
........
现在我的问题是,当我在每个数据库之间同步数据时。我使用 IDENTITY_INSERT ON 关键字。在 INSERTING 行到另一个数据库后,SEED 值将变为 MAX,它将打破这种模式。
例如,数据库 A 有这样的值,
1
6
11
16
数据库 B 有值,
2
7
12
17
如果我将数据从数据库 B 同步到 A。它(A)将 SEED 为 17,下一个值为 22。此时模式将中断。
有人在其他论坛上问过同样的问题。链接在这里。 https://www.sqlservercentral.com/forums/topic/identity-insert-without-reseed/page/2 但是解决方案对我不起作用。他们建议使用“REPLICATION=TRUE;”在连接字符串中以避免 RESEED 但这对我不起作用。
如何解决这个问题?我想我可以通过为每个数据库分配范围来做到这一点,但我更愿意使用序列号。
谢谢。
【问题讨论】:
-
这就是微软创建复制服务的原因。它会为您处理所有这些。
-
使用 GUID 或使用包含系统 ID 的复合键。无论您想出什么编号系统,都会发生冲突或编号用完
标签: sql sql-server database sql-server-2008-r2