SET IDENTITY_INSERT (Transact-SQL)
テーブルの ID 列に明示的な値を追加することを許可します。
構文
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 は、解析時ではなく実行時に設定されます。
権限
実行するには、オブジェクトの所有者であるか、sysadmin 固定サーバー ロール、db_owner 固定データベース ロール、または db_ddladmin 固定データベース ロールのメンバであることが必要です。
例
次の例では、ID 列を含むテーブルを作成した後、DELETE ステートメントによって ID 値に発生したギャップを、SET IDENTITY_INSERT の設定を使用して調整しています。
USE AdventureWorks;
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