仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'stulnfo'中的标识列指定显式值。
操作步骤:
首先建立一个有标识列的表:CREATE TABLE products (id int IDENTITY PRIMARY KEY, product varchar(40))
尝试在表中做以下操作:INSERT INTO products (id, product) VALUES(3, 'garden shovel')结果会导致错误:“当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'products' 中的标识列插入显式值。”
改用:SET IDENTITY_INSERT products ONINSERT INTO products (id, product) VALUES(1, 'garden shovel')返回正确。
建立另外一个表products2,尝试相同插入操作:CREATE TABLE products2 (id int IDENTITY PRIMARY KEY, product varchar(40))然后执行:SET IDENTITY_INSERT products2 ONINSERT INTO products2 (id, product) VALUES(1, 'garden shovel')导致错误:“表 'material.dbo.products' 的 IDENTITY_INSERT 已经为 ON。无法对表 'products2' 执行 SET 操作。”改为执行:SET IDENTITY_INSERT products OFFSET IDENTITY_INSERT products2 ONINSERT INTO products2 (id, product) VALUES(2, 'garden shovel')执行通过。
尝试以下操作:SET IDENTITY_INSERT products2 ONINSERT INTO products2 SELECT * FROM products导致错误:“仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 'products2' 中为标识列指定显式值。”
改为:SET IDENTITY_INSERT products2 ONINSERT INTO products2 (id, product) SELECT * FROM products执行通过。
插入数据时,自增长列是系统自动处理,不需要你来指定数值,你也指定不了。只有将IDENTITY_INSERT 为 ON 时插入数据时,自增长列你才可以指定一个值
比如我有一个表PZ,有如下列XH,ID,INX,KMID,FZZID,CODE ,JFJE,DFJE,RQ,ZY其中XH是自增长,正常插入数据时
insert PZ (ID,INX,KMID,FZZID,CODE ,JFJE,DFJE,RQ,ZY) VALUES(......)不需要指定XH列。如果将IDENTITY_INSERT打开
set IDENTITY_INSERT PZ ON
插入数据时就可以给XH列指定值
INSERT PZ (XH,ID,INX,KMID,FZZID,CODE ,JFJE,DFJE,RQ,ZY) VALUES(指定表中没有的数值,24389,3,1524,1,'0109',0,0,'2011.1.29','JK')
关闭IDENTITY_INSERT
SET IDENTITY_INSERT PZ OFF
2019-04-10
INSERT INTO TABLE_NAME(XXX, XXX,..., XXX) SELECT XXX, XXX,..., XXX FROM TABLE_NAME_BAK;
注意: 即使是所有列,这里的字段名也不能省略.
SET IDENTITY_INSERT TABLE_NAME OFF;