sql-server – 插入复制表失败 – 身份范围检查
我试图在数据库中的表中插入数千行,这两个数据库是跨两个服务器复制的.从发布商或订阅者,我得到相同的错误:
Msg 548,Level 16,State 2,Line 1 The insert failed. It conflicted with an identity range check constraint in database 'XXX',replicated table 'dbo.NODE_ATTRIB_RSLT',column 'ID'. If the identity column is automatically managed by replication,update the range as follows: for the Publisher,execute sp_adjustpublisheridentityrange; for the Subscriber,run the Distribution Agent or the Merge Agent. The statement has been terminated. 检查表上的约束,似乎在我看来,我应该能够在遇到问题之前一次插入至少1000行.但是,当尝试插入几十行时,我得到相同的错误! 以下是我试图插入数据的方式: insert into NODE_ATTRIB_RSLT ([NODE_ID],[ATTRIB_ID],[STATE_ID],[PLAN_REVISION_ID],[TIMESTAMP],[VALUE],[VALUE_TEXT],[LAST_MODIFIED]) SELECT [NODE_ID],[LAST_MODIFIED] FROM [NODE_ATTRIB_RSLT_TEMP] PK列是称为ID的自动生成身份.为了一次插入更少的行,我已经在选择结尾添加了一个WHERE子句,就像这样: WHERE ID >= 1000 and ID <1100 但无济于事 在发布服务器上运行sp_adjustpublisheridentityrange成功执行,但不起作用. 如何解决插入问题? 解决方法我想我已经解决了什么问题.查看复制表的属性,Publisher的标准默认标识范围为10000,Subcriber的标准默认标识范围为1000. 但是,检查实际表上的身份约束(使用SP_HELPCONSTRAINT’node_attrib_rslt’)显示,两台服务器上只有一个1000个ID池.这使得批量插入失败,即使我限制要插入的行数 – 我猜,当运行INSERT INTO检查约束时,SQL Server甚至不会那么远. 要解决它,我不得不做几件事情: 更改表的身份范围.发布者和子公司都将其设置为20K. >在发布服务器上,展开复制 – >本地刊物 在发布服务器上运行sp_adjustpublisheridentityrange存储过程. >服务器上的新查询窗口 从子对象,强制同步服务器. >在订阅服务器上,展开复制 – >本地子表 也许:在表中插入一些测试行. 编辑:我最近不得不重新执行这个任务,并且表中的约束不会更新,直到我将一堆虚拟数据插入到表中,以耗尽默认约束.然后我重新同步服务器,并将约束更新为新值. 之后,检查身份约束显示,我终于有一个20K的ID范围插入与发布者和分类器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |