使用对等拓扑设置 MSSQL 复制:设置冲突检测时出现问题

使用对等拓扑设置 MSSQL 复制:设置冲突检测时出现问题

我正在设置 SQL 复制策略,使用 MSSQL2008 和点对点发布(2 个服务器,每个服务器订阅另一个服务器)。
我遵循了此如何来自 MSDN,设置似乎运行良好:向服务器 A 上的一个表添加一条记录,在服务器 B 上查询显示新记录。到目前为止,一切顺利。到目前为止,
我只有一个表“模板”:

IDPK(计算字段)
节点编号int 默认 1/2 (服务器 A = 1,服务器 B = 2)
本地标识自动识别
姓名nvarchar(100)

现在,我想启用“冲突检测”,默认情况下该功能应已启用。但每次我尝试在发布属性中保存“冲突检测”功能时,都会出现以下错误:

无法保存对等冲突检测属性。

执行 Transact-SQL 语句或批处理时发生异常。(Microsoft.SqlServer.ConnectionInfo)

程序位置:
位于 Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand,ExecutionTypes executeType)
位于 Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand)位于 Microsoft.SqlServer.Replication.ReplicationObject.ExecCommand(
String commandIn)位于 Microsoft.SqlServer.Replication.TransPublication.SetPeerConflictDetection
(Boolean enablePeerConflictDetection,Int32 peerOriginatorID)位于
Microsoft.SqlServer.Management.UI.PubPropSubscriptionOptions.SaveP2PConflictDetection()
位于 Microsoft.SqlServer.Management.UI.PubPropSubscriptionOptions.SaveProperties(ExecutionMode&executionResult)

目标表或视图中不存在列名“Id”。
将数据库上下文更改为“TestDB”。(.Net SqlClient 数据提供程序)

如需帮助,请点击:http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.00.2531&EvtSrc=MSSQLServer&EvtID=1911&LinkId=20476

服务器名称:SERVER_A
错误号:1911
严重性:16
状态:1
行号:2

程序位置:
位于 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔 breakConnection)
位于 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔 breakConnection)
位于 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
位于 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj)
位于 System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName,布尔 async)
位于 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result,String methodName,Boolean sendToPipe)
在 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
在 Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand,ExecutionTypes implementationType)

现在,我拼命地在 Google 上搜索这个错误,但什么也没出现。我似乎也无法找出错误“列名‘Id’不存在...”的确切目标表是什么。
有人成功做到过吗?我是不是漏掉了什么?没有冲突检测的这种设置感觉很没用...

编辑
好的,经过进一步的研究和设置不同的数据库等,我发现 Templates 表的计算“Id”列是罪魁祸首。我不知道为什么,但复制似乎不允许计算列(也是主键)。它现在也可以工作,没有“Id”列,并使用 NodeId 和 LocalId 作为组合 PK。
所以现在的问题是,为什么不允许将计算列作为 PK 进行冲突检测复制?

相关内容