Sql server 不适用于复制不工作的SQL

Sql server 不适用于复制不工作的SQL,sql-server,database-replication,Sql Server,Database Replication,我设置了表列属性。根据 激活“不用于复制”选项后,从复制代理到发布服务器A的连接将插入值为1、2、3、4的行。它们被复制到发布服务器B而不被更改(即1、2、3、4)。来自发布服务器B上的复制代理的连接获得值1001、1002、1003、1004。这些内容将复制到,而不进行更改。分发或合并所有数据时,两个发布服务器的值都为1、2、3、4、1001、1002、1003、1004。发布服务器A上的下一个本地插入值为5。发布服务器B上的下一个本地插入值是1005 但当我尝试上述过程并尝试插入查询时,最后

我设置了表列属性。根据

激活“不用于复制”选项后,从复制代理到发布服务器A的连接将插入值为1、2、3、4的行。它们被复制到发布服务器B而不被更改(即1、2、3、4)。来自发布服务器B上的复制代理的连接获得值1001、1002、1003、1004。这些内容将复制到,而不进行更改。分发或合并所有数据时,两个发布服务器的值都为1、2、3、4、1001、1002、1003、1004。发布服务器A上的下一个本地插入值为5。发布服务器B上的下一个本地插入值是1005

但当我尝试上述过程并尝试插入查询时,最后一行id值为10,然后尝试插入查询

`SET IDENTITY_INSERT [BusOprtn].[dbo].[WinFormMaster] ON
insert into [BusOprtn].[dbo].[WinFormMaster] (Id,Name)  values(40,'fdsf'); 
设置标识\u插入[busoptn].[dbo].[WinFormMaster]关闭
。之后,当我在sql management studio的编辑模式下插入新行时,它会插入id为41的新行,但应该是11。可能是什么错误


若上面并没有错误,那个么我该如何解决以identity列作为主键进行复制或同步的动机呢。如果同步无法实现,我希望使用合并复制

毫无疑问,运行插入后,标识值将是1+最后插入的值。您需要执行dbcc checkident(TableName,newvalue,Reseed)

在以下合并之后,您希望本地的下一个标识值为4:1 2 3 1001 1002 1003。但是,标识值为7,这意味着标识已递增。虽然不是用于标识列上的复制,但应防止递增

在这种情况下,您不希望对表重新设定种子或启用“修改插入标识”

您确实需要指定复制的类型。比如说,

如果使用事务性复制和即时更新订阅服务器选项, 请勿将标识非用于复制设计。而是在 仅限发布服务器,并让订阅服务器仅使用基本数据类型(例如,int)。然后,总是在发布服务器上生成下一个标识值


这可能是问题的答案,但您需要提供这是如何解决OP问题的,而不仅仅是解决问题的代码。请提供一些解释。仅代码的答案(有时)足够好,但代码+解释的答案(几乎总是)更好在合并复制情况下我应该做什么,因为插入在订阅服务器端也在脱机情况下完成。表名是什么?如果是这样,表名是什么?如果是authors执行此操作-DBCC CheckIdent(authors),请注意当前标识值和当前行值。通过将其设置为0,您所做的是设置用户(非复制)进程将在订阅服务器上分发的值。您需要确保此标识值当前未被使用。当前列值是该表中使用的最高值,可以是用户进程或复制进程分配的值。HTHif可以更改模式,考虑添加PuxSeMID来区分发布者,而不是使用具有互斥(在此情况下,+1000)值的同一列。
USE AdventureWorks2012;
GO
DBCC CHECKIDENT ('[BusOprtn].[dbo].[WinFormMaster].[id]', RESEED, 0);
GO