【发布时间】:2011-07-29 06:16:07
【问题描述】:
尝试使用 Sync Framework 2.1 从 SQL Express 同步到 SQL Server 时,有时会出现以下错误。一旦客户端收到此错误,他们必须重新初始化范围。像错误状态这样的语法不会有任何问题,因为它长时间运行没有问题(发生插入)。有什么想法吗?
上午 11:18:21 无法为表“XXX”执行命令“BulkInsertCommand”;事务被回滚。确保命令语法正确。 上午 11:18:21 微软同步 上午 11:18:21 在 Microsoft.Synchronization.Data.ChangeHandlerBase.CheckZombieTransaction(String commandName, String table, Exception ex)
来自跟踪日志:
警告,OfflineAgentMonitor.vshost,13,04/05/2011 11:16:17:224,批量命令 BulkUpdateCommand 失败,出现以下异常。在单次应用期间将重试行。 System.Data.SqlClient.SqlException (0x80131904): 尝试传递具有 19 列的表值参数,其中相应的用户定义表类型需要 20 列。
【问题讨论】:
-
您是否针对同一个表定义了多个范围?
-
没有。我只定义了一个范围。并非所有表格都发生这种情况。
-
对于失败的客户端,尝试将用户定义的表类型(在 Programmability->Types->User-Defined Table Types 下)中的列与同步两侧的 bulkinsert 和 bulkupdate 存储过程进行比较pair.如果表 UDT 和存储的 proc 具有不同的列计数,则在同步伙伴之间供应和保持两个范围定义同步时肯定存在问题。这就解释了为什么重新配置范围会修复它,因为在表 UDT 和每个同步方上存储的过程中都使用正确数量的匹配列重新创建范围。
标签: c# sql microsoft-sync-framework