我设置了表列属性。根据{{3}}。
激活NOT FOR REPLICATION选项后,从复制代理到Publisher A的连接会插入值为1,2,3,4的行。这些行将被复制到Publisher B而不会被更改(即1,2,3 ,4)。来自发布服务器B上的复制代理的连接获取值1001,1002,1003,1004。这些连接将复制到A而不进行更改。分发或合并所有数据时,两个发布者都具有值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');
SET IDENTITY_INSERT [BusOprtn].[dbo].[WinFormMaster] OFF
。在此之后,当我在sql management studio的编辑模式中插入新行时,它会插入具有41个id的新行,但应该是11.这可能是错误。
如果上面没有错误,那么如何解决我的复制或同步化动机与标识列作为主键。如果通过同步不可能,我想进行合并复制。
答案 0 :(得分:1)
没有错误,在运行插入后,标识值将是1 +最后插入的值。您需要执行dbcc checkident(TableName,newvalue,Reseed)
答案 1 :(得分:1)
在下面的合并之后,您期望本地的下一个标识值为4:1 2 3 1001 1002 1003.但是,标识值为7,这意味着标识是递增的事件,虽然不是对身份的复制列应防止递增。
在这种情况下,您不希望重新设置或修改表上的INSERT IDENTITY。
您需要指定复制类型。例如,
如果您使用事务复制和即时更新订阅服务器选项, 不要使用IDENTITY NOT FOR REPLICATION设计。而是在。创建IDENTITY属性 仅限Publisher,并使订阅服务器仅使用基本数据类型(例如,int)。然后,始终在发布者
生成下一个标识值USE AdventureWorks2012;
GO
DBCC CHECKIDENT ('[BusOprtn].[dbo].[WinFormMaster].[id]', RESEED, 0);
GO