sql server在导入数据的时候,有时候要考虑id不变,就要先取消自动增长再导入数据,导完后恢复自增。
比如网站改版从旧数据库导入新数据库,数据库结构不相同,可能会使用insert into xx select ..from yy的语句导入数据。
每次都在sql studio里面手动修改太麻烦,不如写两个语句来的方便,将语法记录下来,所谓好记性不如烂笔头,一面日后又忘记了:
SET IDENTITY_INSERT
允许将显式值插入表的标识列中。
语法
SET IDENTITY_INSERT [ database.[ owner.] ] { table } { ON | OFF }
实例:
set IDENTITY_INSERT products on //设置为允许手动插入值
INSERT INTO products (id,product) VALUES (2,'screwdriver') // OK
set IDENTITY_INSERT products off //设置为禁止手动插入值
扩展:
检查表是否有自增列
SELECT OBJECTPROPERTY(OBJECT_ID('表名'), 'TableHasIdentity'); -- 返回 1 表示存在
重置自增值
DBCC CHECKIDENT ('表名', RESEED, 100); -- 将下一个自增值设为 100
动态启用手动插入
SET IDENTITY_INSERT 表名 ON; -- 允许显式插入自增值
INSERT INTO 表名 (自增列, 其他列...) VALUES (100, ...);
SET IDENTITY_INSERT 表名 OFF;