共用方式為


SET IDENTITY_INSERT (Transact-SQL)

允許將明確的值插入資料表的識別欄位中。

適用於:SQL Server (SQL Server 2008 透過目前版本)、Windows Azure SQL 資料庫 (初始版本,透過目前版本)。

主題連結圖示 Transact-SQL 語法慣例

語法

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')
        , ('Hammer')
        , ('Saw')
        , ('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

請參閱

參考

CREATE TABLE (SQL Server)

IDENTITY (屬性) (Transact-SQL)

SCOPE_IDENTITY (Transact-SQL)

INSERT (Transact-SQL)

SET 陳述式 (Transact-SQL)