SET IDENTITY_INSERT (Transact-SQL)

テーブルの ID 列に明示的な値を追加することを許可します。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF }

引数

  • database_name
    指定したテーブルが含まれているデータベースの名前を指定します。

  • schema_name
    テーブルが所属するスキーマの名前を指定します。

  • table
    ID 列があるテーブルの名前を指定します。

説明

IDENTITY_INSERT プロパティを ON に設定できるのは、セッション内の 1 つのテーブルのみです。1 つのテーブルで既にこのプロパティが ON に設定されている状態で、別のテーブルに対して SET IDENTITY_INSERT ON ステートメントを実行すると、SQL Server では SET IDENTITY_INSERT が既に ON であるというエラー メッセージが返され、このプロパティが ON に設定されているテーブルがレポートされます。

挿入する値がテーブルの現在の ID 値よりも大きい場合、SQL Server では新しく挿入された値が現在の ID 値として自動的に使用されます。

SET IDENTITY_INSERT は、解析時ではなく実行時に設定されます。

権限

ユーザーは、テーブルを所有しているか、テーブルに対する ALTER 権限を持っている必要があります。

次の例では、ID 列を含むテーブルを作成した後、DELETE ステートメントによって生じた ID 値の欠落部分を、SET IDENTITY_INSERT の設定を使用して補っています。

USE AdventureWorks2008R2;
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