如果將值插入到表的標識列中,需要啟用 SET IDENTITY_INSERT。
舉例如下:
創建表Orders、Products,Orders表與Products表分別有標識列OrderID與ProductID:
--表Orders,Products CREATE TABLE Orders( OrderID INT IDENTITY(1,1) NOT NULL PRIMARY KEY, PriceDate DateTime ) CREATE TABLE Products( ProductID INT IDENTITY(1,1) NOT NULL PRIMARY KEY, PriceDate Datetime )
當我們用如下插入語句往Orders表中插入數據:
INSERT INTO Orders (OrderID ,PriceDate ) VALUES(1,GETDATE())
執行此語句后,會出現如下錯誤:
把插入語句做如下修改:
SET IDENTITY_INSERT Orders ON INSERT INTO Orders (OrderID ,PriceDate ) VALUES(1,GETDATE())
此時執行成功;
我們在向Products表做如上插入:
SET IDENTITY_INSERT Products ON INSERT INTO Products (ProductID,PriceDate ) VALUES(1,GETDATE())
產生如下錯誤:
我們對sql做如下修改后,products表插入數據成功
--修改后的sql SET IDENTITY_INSERT Orders ON INSERT INTO Orders (OrderID ,PriceDate ) VALUES(1,GETDATE()) SET IDENTITY_INSERT Orders OFF SET IDENTITY_INSERT Products ON INSERT INTO Products (ProductID,PriceDate ) VALUES(1,GETDATE()) SET IDENTITY_INSERT Products OFF
可以看到當我們對表的Identity_Insert 的啟用與關閉時成對出現,即
SET IDENTITY_INSERT Products ON --Code SET IDENTITY_INSERT Products OFF
如果我們用下面的語句往Products表中插入數據
SET IDENTITY_INSERT Products ON INSERT INTO Products SELECT * FROM Orders SET IDENTITY_INSERT Products OFF
出現如下錯誤:
修改上面t-sql語句:
SET IDENTITY_INSERT Products ON INSERT INTO Products(ProductID,PriceDate) SELECT * FROM Orders SET IDENTITY_INSERT Products OFF
可以知道如果對標識列進行插入,那么需要顯示的列出標識列
懷揣着一點點夢想的年輕人
相信技術和創新的力量
喜歡快速反應的工作節奏
相信技術和創新的力量
喜歡快速反應的工作節奏