SQL Server 2008 で IDENTITY_INSERT を使用するサンプルコード
SQL Server 2008 で IDENTITY_INSERT をオンとオフにする方法
IDENTITY_INSERT をオンにする方法
- SQL Server Management Studio を起動し、目的のデータベースに接続します。
- オブジェクト エクスプローラーで、テーブル フォルダを展開し、IDENTITY_INSERT を設定したいテーブルを選択します。
- テーブル上で右クリックし、プロパティ を選択します。
- プロパティ ダイアログ ボックスで、オプション ページを選択します。
- IDENTITY_INSERT オプションのチェックボックスをオンにします。
- OK をクリックして変更を保存します。
- 手順 1 ~ 3 を上記と同じように実行します。
T-SQL を使用して IDENTITY_INSERT をオンとオフにする
SET IDENTITY_INSERT table_name ON;
SET IDENTITY_INSERT table_name OFF;
例
以下の例は、Customers
テーブルの CustomerID
列に明示的な値を挿入する方法を示します。
-- IDENTITY_INSERT をオンにする
SET IDENTITY_INSERT Customers ON;
-- 値 10 を持つ新しい行を挿入する
INSERT INTO Customers (CustomerID, FirstName, LastName)
VALUES (10, 'John', 'Doe');
-- IDENTITY_INSERT をオフにする
SET IDENTITY_INSERT Customers OFF;
注意事項
- IDENTITY_INSERT をオンにすると、IDENTITY 列に挿入される値が重複する可能性があります。
- IDENTITY_INSERT をオンにした状態で INSERT ステートメントを実行すると、IDENTITY 列に値が指定されていない場合は、自動的に生成された値が挿入されます。
- IDENTITY_INSERT を使用するときは、パフォーマンスに影響を与える可能性があることに注意してください。
-- IDENTITY_INSERT をオンにする
SET IDENTITY_INSERT Customers ON;
-- 値 10 を持つ新しい行を挿入する
INSERT INTO Customers (CustomerID, FirstName, LastName)
VALUES (10, 'John', 'Doe');
-- IDENTITY_INSERT をオフにする
SET IDENTITY_INSERT Customers OFF;
-- 値が自動生成される新しい行を挿入する
INSERT INTO Customers (FirstName, LastName)
VALUES ('Jane', 'Doe');
このコードを実行すると、次のようになります。
- 最初の INSERT ステートメントは、
CustomerID
列に値 10 を持つ新しい行をCustomers
テーブルに挿入します。 - 2 番目の INSERT ステートメントは、
CustomerID
列に値を指定せずに新しい行をCustomers
テーブルに挿入します。IDENTITY_INSERT がオフになっているため、CustomerID
列には自動的に生成された値が挿入されます。
- 特定の値を持つ複数の行を挿入するには、
INSERT INTO
ステートメントを複数回実行できます。 SELECT
ステートメントを使用して、IDENTITY 列の値を取得できます。
IDENTITY_INSERT を使用する以外の方法
INSERT ステートメントの OUTPUT 句を使用する
OUTPUT
句を使用して、IDENTITY 列の自動生成された値を取得できます。この値を使用して、別の INSERT ステートメントで別のテーブルに挿入できます。
-- Customers テーブルに新しい行を挿入する
INSERT INTO Customers (FirstName, LastName)
VALUES ('John', 'Doe');
-- OUTPUT 句を使用して、IDENTITY 列の値を取得する
DECLARE @CustomerID INT;
INSERT INTO Customers (FirstName, LastName)
OUTPUT INSERTED.CustomerID INTO @CustomerID
VALUES ('Jane', 'Doe');
-- 他のテーブルに @CustomerID を挿入する
INSERT INTO OtherTable (CustomerID)
VALUES (@CustomerID);
トリガーを使用して、IDENTITY 列に値が挿入される前に、カスタム コードを実行できます。このコードを使用して、別のテーブルに値を挿入できます。
CREATE TRIGGER trg_InsertCustomer
ON Customers
AFTER INSERT
AS
BEGIN
-- 他のテーブルに CustomerID を挿入する
INSERT INTO OtherTable (CustomerID)
SELECT CustomerID
FROM INSERTED;
END;
SQLCLR を使用して、カスタム コードを作成できます。このコードを使用して、IDENTITY 列に明示的な値を挿入できます。
- これらの方法は、IDENTITY_INSERT を使用するよりも複雑な場合があります。
- これらの方法は、パフォーマンスに影響を与える可能性があることに注意してください。
sql sql-server-2008