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 2005 では 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
参照
関連項目
CREATE TABLE (Transact-SQL)
IDENTITY (プロパティ) (Transact-SQL)
SCOPE_IDENTITY (Transact-SQL)
INSERT (Transact-SQL)
SET (Transact-SQL)