?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;