SET IDENTITY_INSERT的用法


如果將值插入到表的標識列中,需要啟用 SET IDENTITY_INSERT。

舉例如下:

創建表Orders、Products,Orders表與Products表分別有標識列OrderID與ProductID:

表Orders,Products
1 CREATE TABLE Orders(
2 OrderID    INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
3 PriceDate DateTime
4 )
5 
6 CREATE TABLE Products(
7 ProductID    INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
8 PriceDate Datetime
9 )


當我們用如下插入語句往Orders表中插入數據:

插入到Orders表
1 INSERT INTO Orders (OrderID ,PriceDate ) VALUES(1,GETDATE())

執行此語句后,會出現如下錯誤:

把插入語句做如下修改:

修改后的插入語句
1 SET IDENTITY_INSERT Orders ON
2 INSERT INTO Orders (OrderID ,PriceDate ) VALUES(1,GETDATE())

此時執行成功;

我們在向Products表做如上插入:

插入到Products表
1 SET IDENTITY_INSERT Products ON
2 INSERT INTO Products (ProductID,PriceDate ) VALUES(1,GETDATE())

產生如下錯誤:

我們對sql做如下修改后,products表插入數據成功

 

修改后的sql
1 SET IDENTITY_INSERT Orders ON
2 INSERT INTO Orders (OrderID ,PriceDate ) VALUES(1,GETDATE())
3 SET IDENTITY_INSERT Orders OFF
4 
5 SET IDENTITY_INSERT Products ON
6 INSERT INTO Products (ProductID,PriceDate ) VALUES(1,GETDATE())
7 SET IDENTITY_INSERT Products OFF


可以看到當我們對表的Identity_Insert 的啟用與關閉時成對出現,即

成對出現identity_INsert
1 SET IDENTITY_INSERT Products ON
2 --Code
3 SET IDENTITY_INSERT Products OFF


如果我們用下面的語句往Products表中插入數據

View Code
1 SET IDENTITY_INSERT Products ON
2 INSERT INTO Products SELECT * FROM Orders
3 SET IDENTITY_INSERT Products OFF

出現如下錯誤:

修改上面t-sql語句:

修改后的T-sql
1 SET IDENTITY_INSERT Products ON
2 INSERT INTO Products(ProductID,PriceDate) SELECT * FROM Orders
3 SET IDENTITY_INSERT Products OFF

可以知道如果對標識列進行插入,那么需要顯示的列出標識列


免責聲明!

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



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