次の方法で共有


SET IDENTITY_INSERT (Transact-SQL)

テーブルの ID 列に明示的な値を追加することを許可します。

適用対象: SQL Server (SQL Server 2008 から現在のバージョンまで)、Windows Azure SQL データベース (初回のリリースから現在のバージョンまで)

トピック リンク アイコン Transact-SQL 構文表記規則

構文

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 は、解析時ではなく実行時に設定されます。

権限

ユーザーはテーブルを所有しているか、テーブルに対する ALTER 権限を持っている必要があります。

使用例

次の例では、ID 列を含むテーブルを作成した後、DELETE ステートメントによって ID 値に発生したギャップを、SET IDENTITY_INSERT の設定を使用して調整しています。

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

関連項目

参照

CREATE TABLE (SQL Server)

IDENTITY (プロパティ) (Transact-SQL)

SCOPE_IDENTITY (Transact-SQL)

INSERT (Transact-SQL)

SET ステートメント (Transact-SQL)