SET IDENTITY_INSERT (Transact-SQL)SET IDENTITY_INSERT (Transact-SQL)

適用対象: ○SQL Server (2008 以降) ○Azure SQL Database XAzure SQL Data Warehouse XParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

テーブルの ID 列に明示的な値を追加することを許可します。Allows explicit values to be inserted into the identity column of a table.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

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

引数Arguments

database_namedatabase_name
指定したテーブルが含まれているデータベースの名前を指定します。Is the name of the database in which the specified table resides.

schema_nameschema_name
テーブルが所属するスキーマの名前を指定します。Is the name of the schema to which the table belongs.

table_nametable_name
ID 列があるテーブルの名前を指定します。Is the name of a table with an identity column.

RemarksRemarks

IDENTITY_INSERT プロパティを ON に設定できるのは、セッション内の 1 つのテーブルのみです。At any time, only one table in a session can have the IDENTITY_INSERT property set to ON. 1 つのテーブルで既にこのプロパティが ON に設定されている状態で、別のテーブルに対して SET IDENTITY_INSERT ON ステートメントを実行すると、SQL ServerSQL Server では SET IDENTITY_INSERT が既に ON であるというエラー メッセージが返され、このプロパティが ON に設定されているテーブルがレポートされます。If a table already has this property set to ON, and a SET IDENTITY_INSERT ON statement is issued for another table, SQL ServerSQL Server returns an error message that states SET IDENTITY_INSERT is already ON and reports the table it is set ON for.

挿入する値がテーブルの現在の ID 値よりも大きい場合、SQL ServerSQL Server では新しく挿入された値が現在の ID 値として自動的に使用されます。If the value inserted is larger than the current identity value for the table, SQL ServerSQL Server automatically uses the new inserted value as the current identity value.

SET IDENTITY_INSERT は、解析時ではなく実行時に設定されます。The setting of SET IDENTITY_INSERT is set at execute or run time and not at parse time.

アクセス許可Permissions

ユーザーはテーブルを所有しているか、テーブルに対する ALTER 権限を持っている必要があります。User must own the table or have ALTER permission on the table.

使用例Examples

次の例では、ID 列を含むテーブルを作成した後、SET IDENTITY_INSERT ステートメントによって ID 値に発生したギャップを、DELETE の設定を使用して調整しています。The following example creates a table with an identity column and shows how the SET IDENTITY_INSERT setting can be used to fill a gap in the identity values caused by a DELETE statement.

USE AdventureWorks2012;  
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')  
        , ('Hammer')  
        , ('Saw')  
        , ('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  

参照See Also

CREATE TABLE (Transact-SQL) CREATE TABLE (Transact-SQL)
IDENTITY (Property) (Transact-SQL) IDENTITY (Property) (Transact-SQL)
SCOPE_IDENTITY (Transact-SQL) SCOPE_IDENTITY (Transact-SQL)
INSERT (Transact-SQL) INSERT (Transact-SQL)
SET ステートメント (Transact-SQL)SET Statements (Transact-SQL)