SET IDENTITY_INSERT詳解


聲明:本博文摘自http://www.lmwlove.com/ac/ID500

自增列默認是不能插入顯式值的,當我們試圖給自增列插入值時,會報以下錯誤:
當 IDENTITY_INSERT 設置為 OFF 時,不能為表 'table1' 中的標識列插入顯式值。
如果我們想為表的自增列插入顯式值,我們可以通過SET IDENTITY_INSERT語法來實現,這在數據轉移的時候尤為有效。
我們先看看IDENTITY_INSERT的語法。

作用:允許將顯式值插入表的標識列中。
語法:SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF }
參數:
database_name 
指定的表所在的數據庫的名稱。
schema_name 
表所屬的架構的名稱。
table 
包含標識列的表的名稱。
備注:
任何時候,一個會話中只有一個表的 IDENTITY_INSERT 屬性可以設置為 ON。如果某個表已將此屬性設置為 ON,則對另一個表發出 SET IDENTITY_INSERT ON 語句時,SQL Server 2005 將返回一個錯誤信息,指出 SET IDENTITY_INSERT 已設置為 ON,並報告已將其屬性設置為 ON 的表。
如果插入值大於表的當前標識值,則 SQL Server 自動將新插入值作為當前標識值使用。
SET 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的設置,都只在當前會話中有效!

轉載於:https://www.cnblogs.com/njl041x/p/3443646.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM