SET IDENTITY_INSERT (Transact-SQL)
適用対象:SQL ServerAzure SQL データベースAzure SQL Managed InstanceAzure Synapse Analytics
テーブルの ID 列に明示的な値を追加することを許可します。
構文
SET IDENTITY_INSERT [ [ database_name . ] schema_name . ] table_name { ON | OFF }
引数
database_name
指定したテーブルが存在するデータベースの名前。
schema_name
テーブルが属するスキーマの名前。
table_name
ID 列を持つテーブルの名前。
解説
IDENTITY_INSERT
プロパティを ON
に設定できるのは、セッション内のテーブルが 1 つだけです。 テーブルにこのプロパティが既に ON
に設定されていて、別のテーブルに対して SET IDENTITY_INSERT ON
ステートメントが発行されている場合、SQL Server は、SET IDENTITY_INSERT
が既に ON
されていることを示すエラー メッセージを返し、ON
が設定されているテーブルを報告します。
挿入する値がテーブルの現在の ID 値よりも大きい場合、SQL Server では新しく挿入された値が現在の ID 値として自動的に使用されます。
SET IDENTITY_INSERT
の設定は、解析時ではなく実行時に設定されます。
アクセス許可
ユーザーはテーブルを所有しているか、テーブルに対する ALTER
権限を持っている必要があります。
例
次の例では、ID 列を含むテーブルを作成した後、SET IDENTITY_INSERT
ステートメントによって ID 値に発生したギャップを、DELETE
の設定を使用して調整しています。
USE AdventureWorks2022;
GO
ツール テーブルを作成します。
CREATE TABLE dbo.Tool
(
ID INT IDENTITY NOT NULL PRIMARY KEY,
Name VARCHAR (40) NOT NULL
);
GO
products テーブルに値を挿入します。
INSERT INTO dbo.Tool (Name)
VALUES ('Screwdriver'),
('Hammer'),
('Saw'),
('Shovel');
GO
ID 値にギャップを作成します。
DELETE dbo.Tool
WHERE Name = 'Saw';
GO
SELECT *
FROM dbo.Tool;
GO
明示的な ID 値 3 を挿入してみてください。
INSERT INTO dbo.Tool (ID, Name)
VALUES (3, 'Garden shovel');
GO
前の INSERT
コードでは、次のエラーが返されます。
An explicit value for the identity column in table 'AdventureWorks2022.dbo.Tool' can only be specified when a column list is used and IDENTITY_INSERT is ON.
IDENTITY_INSERT
を ON
に設定します。
SET IDENTITY_INSERT dbo.Tool ON;
GO
明示的な ID 値 3 を挿入してみてください。
INSERT INTO dbo.Tool (ID, Name)
VALUES (3, 'Garden shovel');
GO
SELECT *
FROM dbo.Tool;
GO
ツール テーブルを削除します。
DROP TABLE dbo.Tool;
GO
関連コンテンツ
- CREATE TABLE (Transact-SQL)
- CREATE TABLE (Transact-SQL) IDENTITY (プロパティ) の
- SCOPE_IDENTITY (Transact-SQL)
- INSERT (Transact-SQL)
- SET ステートメント (Transact-SQL)