テーブルの ID 列に明示的な値を追加することを許可します。テーブルの ID 列に明示的な値を追加することを許可します。
構文
SET IDENTITY_INSERT [ database.[ owner.] ] { table } { ON | OFF }
引数
database
指定したテーブルを含むデータベースの名前です。
owner
テーブル所有者の名前です。
table
ID 列があるテーブルの名前です。
解説
セッション内の 1 つのテーブルのみが IDENTITY_INSERT プロパティを ON に設定できます。あるテーブルで既にこのプロパティが ON に設定されている状態で、別のテーブルに対して SET IDENTITY_INSERT ON ステートメントを実行すると、Microsoft® SQL Server™ は、SET IDENTITY_INSERT が既に ON であるというエラー メッセージを返し、このプロパティが ON に設定されているテーブルをレポートします。
挿入する値がテーブルの現在の ID 値を超える場合は、SQL Server は自動的に、新しく挿入された値を現在の ID 値として使います。
SET IDENTITY_INSERT は、解析時ではなく実行時に設定されます。
権限
実行権限は、特に指定のない限り、固定サーバー ロール sysadmin、固定データベース ロール db_owner、固定データベース ロール db_ddladmin、およびオブジェクト所有者に与えられます。
例
この例では、ID 列を含むテーブルを作成した後、SET IDENTITY_INSERT の設定を使用して、DELETE ステートメントによって ID 値に発生したギャップを埋める方法を示しています。
-- Create products table.
CREATE TABLE products (id int IDENTITY PRIMARY KEY, product varchar(40))
GO
-- Inserting values into products table.
INSERT INTO products (product) VALUES ('screwdriver')
INSERT INTO products (product) VALUES ('hammer')
INSERT INTO products (product) VALUES ('saw')
INSERT INTO products (product) VALUES ('shovel')
GO
-- Create a gap in the identity values.
DELETE products
WHERE product = 'saw'
GO
SELECT *
FROM products
GO
-- Attempt to insert an explicit ID value of 3;
-- should return a warning.
INSERT INTO products (id, product) VALUES(3, 'garden shovel')
GO
-- SET IDENTITY_INSERT to ON.
SET IDENTITY_INSERT products ON
GO
-- Attempt to insert an explicit ID value of 3
INSERT INTO products (id, product) VALUES(3, 'garden shovel').
GO
SELECT *
FROM products
GO
-- Drop products table.
DROP TABLE products
GO
関連項目
CREATE TABLE
IDENTITY (プロパティ)
INSERT
SET