不适用于复制不工作的SQL

时间:2014-08-19 10:45:14

标签: sql-server database-replication

我设置了表列属性Column properties。根据{{​​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.这可能是错误。

如果上面没有错误,那么如何解决我的复制或同步化动机与标识列作为主键。如果通过同步不可能,我想进行合并复制。

2 个答案:

答案 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)。然后,始终在发布者

生成下一个标识值

Link

USE AdventureWorks2012;
GO
DBCC CHECKIDENT ('[BusOprtn].[dbo].[WinFormMaster].[id]', RESEED, 0);
GO