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 將返回一個錯誤信息,指出 SET IDENTITY_INSERT 已設置為 ON,并報告已將其屬性設置為 ON 的表。
如果插入值大于表的當前標識值,則 SQL Server 自動將新插入值作為當前標識值使用。
SET IDENTITY_INSERT 的設置是在執行或運行時設置的,而不是在分析時設置的。
權限 用戶必須擁有表,或對表具有 ALTER 權限。
示例 下面的示例將創建一個包含標識列的表,并說明如何使用 SET IDENTITY_INSERT 設置來填充由 DELETE 語句導致的標識值中的空隙。
復制代碼 代碼如下:
USE AdventureWorks2012; GO -- Create tool table. CREATE TABLE dbo.Tool( ID INT IDENTITY NOT NULL PRIMARY KEY, Name VARCHAR(40) NOT NULL ) GO -- Inserting values into products table. INSERT INTO dbo.Tool(Name) VALUES ('Screwdriver') INSERT INTO dbo.Tool(Name) VALUES ('Hammer') INSERT INTO dbo.Tool(Name) VALUES ('Saw') INSERT INTO dbo.Tool(Name) VALUES ('Shovel') GO
-- Create a gap in the identity values. DELETE dbo.Tool WHERE Name = 'Saw' GO
SELECT * FROM dbo.Tool GO
-- Try to insert an explicit ID value of 3; -- should return a warning. INSERT INTO dbo.Tool (ID, Name) VALUES (3, 'Garden shovel') GO
-- SET IDENTITY_INSERT to ON. SET IDENTITY_INSERT dbo.Tool ON GO
-- Try to insert an explicit ID value of 3. INSERT INTO dbo.Tool (ID, Name) VALUES (3, 'Garden shovel') GO
SELECT * FROM dbo.Tool GO -- Drop products table. DROP TABLE dbo.Tool GO