SQL Server 2008 で IDENTITY_INSERT を使用するサンプルコード

2024-04-02

SQL Server 2008 で IDENTITY_INSERT をオンとオフにする方法

IDENTITY_INSERT をオンにする方法

  1. SQL Server Management Studio を起動し、目的のデータベースに接続します。
  2. オブジェクト エクスプローラーで、テーブル フォルダを展開し、IDENTITY_INSERT を設定したいテーブルを選択します。
  3. テーブル上で右クリックし、プロパティ を選択します。
  4. プロパティ ダイアログ ボックスで、オプション ページを選択します。
  5. IDENTITY_INSERT オプションのチェックボックスをオンにします。
  6. OK をクリックして変更を保存します。
  1. 手順 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


MS-Accessで複数テーブルのデータを効率的に扱う: UNIONとORDER BYの活用

UNION は、複数の SELECT クエリの結果を結合する演算子です。異なるテーブルや異なる条件で取得したデータでも、まとめて一つの結果セットとして扱えます。例:このクエリは、テーブル1 と テーブル2 の全てのデータを取得し、結合します。...


SQL Serverにおける主キーの選び方:整数、文字列、GUID、複合キー

一意性: GUIDは世界中で一意な識別子を生成するため、重複する可能性がありません。順序性: GUIDは生成された順序でソートされます。パフォーマンス: GUIDはランダムな値なので、インデックスのパフォーマンスが向上します。グローバルな分散: GUIDはデータベースサーバーや地域を超えて一意性を保ちます。...


PostgreSQL ワイルドカード LIKE を使用した複数単語検索

このチュートリアルでは、LIKE 演算子とワイルドカードを使用して、複数の単語のリストに一致する行を見つける方法について説明します。このチュートリアルを完了するには、次のものが必要です。PostgreSQL データベースPostgreSQL に接続できるクライアントツール (例: psql)...


トラブルシューティングに役立つ!SQLite3のクエリログを活用しよう

sqlite3_trace() 関数は、実行されるたびに呼び出されるコールバック関数を設定できます。このコールバック関数を使用して、実行された SQL クエリをログに記録することができます。このコードは、database. db データベースに対して実行されるすべての SQL クエリをコンソールに記録します。...


SQL SQL SQL SQL Amazon で見る



【保存版】SQL ServerでIDENTITY_INSERTを使いこなす!有効化・無効化の方法とサンプルコード

IDENTITY_INSERT を有効化すると、以下の操作が可能になります。テーブルに重複する ID 値を持つ行を挿入する特定のシーケンスに従って ID 値を割り当てるIDENTITY_INSERT の有効化と無効化は、次の SET ステートメントを使用して行うことができます。