码迷,mamicode.com
首页 > 其他好文 > 详细

当 IDENTITY_INSERT 设置为 OFF 时,不能为表‘XXX’中的标识列插入显式值。

时间:2016-07-08 18:18:11      阅读:377      评论:0      收藏:0      [点我收藏+]

标签:

  在创建事务复制时,很多时候不一定使用快照进行初始化,而是使用备份还原初始化。当对有标识列(即identity的自增列)的表进行复制的时候,使用备份还原初始化搭建起来的复制常常就会报错,即:当 IDENTITY_INSERT 设置为 OFF 时,不能为表‘XXX’中的标识列插入显式值。这个错误是当创建表的时候,有一项’标识规范‘中的’不用于复制‘默认为‘否’,当发布端插入数据时导致,右键表,选择设计选项,如图

技术分享

  当使用备份还原进行初始化,订阅端的这张表该选项也是‘否’,因此就会报错。在不删除此复制的情况下,以下有几种方法可进行修改:

1.  最简单的就是讲订阅服务器上这张表的这个选项修改为‘是’即可;

2.  既然这里这个选项是‘否’,那么在创建这个表的时候在标识列就可以加一句:not for replication,但是既然已经有该表并且为了此表配置了复制,那么就可以在订阅服务器上执行下面这句代码即可,

use [database]
go
alter
table [tablename] alter column [columnname] add not for replication

3.  第三种方法需要对复制的原理有一定的了解,复制只会将配置了复制的表上的update,delete和insert操作所造成的数据变化传递过来,在订阅服务器上针对这张表会创建三个存储过程,分别为dbo.sp_MSupd_dbo表名、dbo.sp_MSdel_dbo表名、dbo.sp_MSins_dbo表名,用这三个存储过程对订阅表进行修改。那么因为identity的存在,identity_insert选项为OFF,而每一次的插入需要将identity_insert设置为ON才可以进行插入,我们可以直接将插入的这个存储过程(dbo.sp_MSins_dbo表名)进行修改,加上下面这句,就可以自动插入数据。

set identity_insert [表名] on

技术分享技术分享

 

当 IDENTITY_INSERT 设置为 OFF 时,不能为表‘XXX’中的标识列插入显式值。

标签:

原文地址:http://www.cnblogs.com/zx3212/p/5654037.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!