在事务复制期间,我们有数据从服务器 A 传输到服务器 B。
假设我们要在服务器 A 上的表上重新设置标识列(无论出于何种原因),这将如何影响服务器 B 上的数据?
我的直觉会说服务器 A 上的数据将使用新播种的身份,并将按原样发送到服务器 B(并且服务器 B 将具有使用新身份的内容),但我不确定这是否是正确的。
在事务复制期间,我们有数据从服务器 A 传输到服务器 B。
假设我们要在服务器 A 上的表上重新设置标识列(无论出于何种原因),这将如何影响服务器 B 上的数据?
我的直觉会说服务器 A 上的数据将使用新播种的身份,并将按原样发送到服务器 B(并且服务器 B 将具有使用新身份的内容),但我不确定这是否是正确的。
当您有 Identity 列并且这是表的主键时,这总是很棘手。
根据我处理 T-Rep 和 Merge 的经验,我建议使用
NOT FOR REPLICATION
NO。默认情况下,它设置为 YES。您可以在 sql 2005 及更高版本上使用sys.sp_identitycolumnforreplication
.如果您不更新订户端的数据,那应该没问题。
要回答您的问题:
考虑到您没有更新订阅者上的数据,当您想要重新设定种子时,您应该始终从标识列中获取最大值,然后相应地重新设定值。
您可以使用下面的 sql 来找出答案:
例如考虑下面的客户表:
现在,如果您想以某种方式重新设定身份值,您可以运行
这意味着它将当前标识值设置为 8,因此下次将任何行插入表中时,它将具有当前标识值 8 (CurrentIdentityValue) + 1(Identity_increment) = 9。
你必须小心这样做,因为这可能会导致身份差距。
您可以做的其他事情是:
sp_addaritcle
使用参数的手动身份范围管理解决方案,例如@identity_range ,@pub_identity_range and @threshold
继续阅读: