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

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

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

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

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

use [database]goalter 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

时间: 2024-12-16 20:59:48

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

当 IDENTITY_INSERT 设置为 OFF 时,不能向表"*User" 中的标识列插入显示值

解决方法1: 找到该表自动增长的那一列,插入数据时不选择那一列 解决方法2: set IDENTITY_INSERT 表名on;-----设置on 再执行插入记录操作; set IDENTITY_INSERT 表名Off;------插入完毕后恢复为off 设置

当 IDENTITY_INSERT 设置为 OFF 时,不能向表 '#TT' 中的标识列插入显式值。 sql server 临时表

当 IDENTITY_INSERT 设置为 OFF 时,不能向表 '#TT' 中的标识列插入显式值.我是在SqlServer写存储过程中遇到的这个错误,当时就心想:临时表怎么会有主键呢,我也没有设置主键.然后我就和同事一块调试,终于发现了.原因就是我把真实的数据表中id(其实就是主键)取出来放到临时表(#TT)中,一开始是以为把主键的属性取出来了.后来又一起调试,发现不是那么回事,1.原来SqlServer会自动给临时表设置主键,如果你要插入数据的话,还要打开主键,这样你才能插入数据.“当 ID

当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'OrderList' 中的标识列插入显式值

问题描述:在SQL SERVER 2008中,向数据表中字段插入数据时,会报错,错误如下: 当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'OrderList' 中的标识列插入显式值. 解决方案: 1 --允许将显式值插入表的标识列中 ON-允许 OFF-不允许 2 set identity_insert OrderList ON--打开3 4 insert into OrderList(id,ordername,createdate) 5 values(4520,'set'

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

--允许将显示值插入表的标识列中-ON:允许 OFF:不允许set identity_insert T_shell ONset identity_insert T_Shell OFF 当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'T_Shell' 中的标识列插入显式值.

当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'tb_MyInvoices' 中的标识列插入显式值

默认情况下,IDENTITY_INSER就是off 这种情况下,你写insert 语句时,identity栏位,不要写值,系统会自动帮你写入. 举例说明: create table #aa(id int identity(1,1),dt datetime,pay int) go insert into #aa(dt,pay)values('2012-4-12',100) --不能向 id栏位写值,系统会自动写 go insert into #aa(id,dt,pay)values(100,'20

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

{"当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'OrderList' 中的标识列插入显式值"} 对于这个异常可以从两个角度来处理:A:数据库执行语句  B:直接修改NHibernate中持久化类映射配置文件id节点 A数据库执行语句: 问题描述:当在数据库表主键设计为 (Orderid  int identity primary key),相对这个主键IDENTITY_INSERT默认设置为OFF,就是不能够显示插入主键id的值,例子如下: insert int

SQLServer,仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表xx中的标识列指定显式值

情景: 如果此表的主键或者其中有一个列使用了  IDENTITY(1,1) 自增长时,但又想手动为此列指定值时,当用如下解决方案: set identity_insert 表名 ON 使用此命令把表的自增列设置为ON 然后使用 : SELECT 3,0,'阿道夫',141,0,2,'133','09 24 2008 3:23PM','133','09 24 2008 3:23PM',0,'NULL' 的方式,插入数据(是使用Select的方式,不能用Insert into). 插入完成以后,再把

仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'xxxx'中的标识列指定显式值

执行以下sql INSERT INTO [Country] VALUES (1, N'中国', N'China', N'CN'); 提示错误 仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'xxxx'中的标识列指定显式值 解决方法: 在执行sql前后分别加:SET IDENTITY_INSERT [dbo].[Country] ON 和 SET IDENTITY_INSERT [dbo].[Country] OFF 同时修改sql语句:INSERT INTO [Co

当 IDENTITY_INSERT 设置为 OFF 时,不能向表 中的标识列插入显式值错误的解决方法

一个主键.两个外键,把两个外键改为非空就行了. CREATE TABLE [dbo].[User_Compare]( [Id] [int] IDENTITY(1,1) NOT NULL, [UserId] [int] NOT NULL, [PatentId] [int] NOT NULL, CONSTRAINT [PK_User_Compare] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOM