声明:本博文摘自http://www.lmwlove.com/ac/ID500
自增列默认是不能插入显式值的,当我们试图给自增列插入值时,会报以下错误:
当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'table1' 中的标识列插入显式值。
如果我们想为表的自增列插入显式值,我们可以通过SET IDENTITY_INSERT语法来实现,这在数据转移的时候尤为有效。
我们先看看IDENTITY_INSERT的语法。
1 create table hr_member(ID int identity(1,1) primary key,name varchar(100))
1 insert into hr_member(id,name) values (1,'wfs')
会报以下的错误:
当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'hr_member' 中的标识列插入显式值。
设置identity_insert的值后再插入数据:
1 set identity_insert hr_member on 2 insert into hr_member(id,name) values (1,'wfs')
执行成功!
注意:在同一个会话中,只能有一个表的identity_insert可以设置为ON。
我们再创建另一个表:
1 create table hr_member_1(ID int identity(1,1) primary key,name varchar(100))
然后执行:
1 set identity_insert hr_member on 2 set identity_insert hr_member_1 on
会报以下的错误:
表 'test.dbo.hr_member' 的 IDENTITY_INSERT 已经为 ON。无法为表 'hr_member_1' 执行 SET 操作。
修改代码:
1 set identity_insert hr_member off 2 set identity_insert hr_member_1 on
执行成功!
注意:我们在在对标识列执行插入操作时,一定要列出此标识列的列名:
如下代码:
1 set identity_insert hr_member on 2 insert into hr_member 3 select 2,'abc'
会报以下错误:
仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'hr_member'中的标识列指定显式值。
修改代码:
1 set identity_insert hr_member on 2 insert into hr_member(ID,name) 3 select 2,'abc'
执行成功!
注意:任何set identity_insert 表名 on的设置,都只在当前会话中有效!