@@IDENTITY、SCOPE_IDENTITY()、OUTPUT句、IDENTITY_INSERTの違い

2024-04-04

SQL ServerでINSERTした値のIDを取得する方法

SQL ServerでINSERTステートメントを実行した後、挿入されたレコードのIDを取得することはよくある操作です。このIDは、そのレコードを後で参照したり、更新したり、削除したりするために使用できます。

方法

IDを取得するには、いくつかの方法があります。

@@IDENTITYは、最後に挿入されたIDを取得するための特殊な変数です。INSERTステートメントの後に単独で実行できます。

INSERT INTO テーブル名 (列名, 列名) VALUES (値, 値);
SELECT @@IDENTITY;

SCOPE_IDENTITY()は、現在のスコープ内で最後に挿入されたIDを取得するための関数です。INSERTステートメントと同じステートメント内で実行する必要があります。

INSERT INTO テーブル名 (列名, 列名) VALUES (値, 値);
DECLARE @id INT;
SET @id = SCOPE_IDENTITY();

OUTPUT句を使用して、INSERTステートメントの結果セットにIDを含めることができます。

INSERT INTO テーブル名 (列名, 列名) VALUES (値, 値)
OUTPUT INSERTED.id;

IDENTITY_INSERTオプションを使用して、INSERTステートメントでIDを明示的に指定することができます。

SET IDENTITY_INSERT テーブル名 ON;
INSERT INTO テーブル名 (id, 列名, 列名) VALUES (1, 値, 値);
SET IDENTITY_INSERT テーブル名 OFF;
  • @@IDENTITYは、最もシンプルで簡単な方法です。
  • **SCOPE_IDENTITY()**は、複数のINSERT`ステートメントを実行する場合に便利です。
  • OUTPUT句は、IDを他の列と一緒に取得する場合に便利です。
  • IDENTITY_INSERTは、IDを明示的に指定したい場合に便利です。

注意

  • @@IDENTITYSCOPE_IDENTITY()は、最後に挿入されたIDのみを取得します。複数行を挿入した場合、これらの変数は最初の行のIDのみを返します。
  • IDENTITY_INSERTオプションを使用する場合は、挿入後に必ずオフにすることを忘れないでください。



-- テーブルの作成
CREATE TABLE テーブル名 (
    id INT IDENTITY(1, 1) PRIMARY KEY,
    列名 VARCHAR(50),
    列名 INT
);

-- レコードの挿入
INSERT INTO テーブル名 (列名, 列名) VALUES ('値', 10);

-- @@IDENTITY を使用して ID を取得
SELECT @@IDENTITY;

-- SCOPE_IDENTITY() を使用して ID を取得
DECLARE @id INT;
SET @id = SCOPE_IDENTITY();

-- OUTPUT 句を使用して ID を取得
INSERT INTO テーブル名 (列名, 列名) VALUES ('値', 10)
OUTPUT INSERTED.id;

-- IDENTITY_INSERT を使用して ID を取得
SET IDENTITY_INSERT テーブル名 ON;
INSERT INTO テーブル名 (id, 列名, 列名) VALUES (1, '値', 10);
SET IDENTITY_INSERT テーブル名 OFF;

このコードを実行すると、以下の結果が出力されます。

1

1

1

1

上記は基本的な例です。実際のコードは、要件に合わせて変更する必要があります。




ユーザー定義関数を使用して、IDを取得することができます。

これらの方法は、より複雑な要件を満たす場合に役立ちます。

注意事項

  • 上記の方法を使用する場合は、パフォーマンスとセキュリティに注意する必要があります。
  • 複雑な要件がある場合は、データベース管理者に相談することをお勧めします。

sql-server


Lucene.Net.Contrib.SqlServer:SQL ServerとLucene.Netを統合するオープンソースプロジェクト

Lucene. Net は、.NET 開発者向けのオープンソース全文検索エンジンです。SQL Server と組み合わせることで、データベース内のテキストデータを高速かつ効率的に検索することができます。構成方法Lucene. Net を SQL Server と構成するには、以下の手順が必要です。...


検索条件を動的に生成して、自由自在にデータを見つけ出す!SQL ServerでLIKEステートメントと変数の強力タッグ

まず、LIKE ステートメントで使用したい変数を宣言する必要があります。SQL Server では、DECLARE ステートメントを使用して変数を宣言できます。上記例では、@search_pattern という名前の変数を宣言し、最大50文字の文字列型を指定しています。...


SQL Server データエクスポートのベストプラクティス

SQL Serverでデータを別のデータベースやファイルにエクスポートする方法はいくつかありますが、その中でもINSERT INTOを使う方法は、比較的シンプルで汎用性の高い方法です。この方法は、INSERT INTO文を使って、エクスポートしたいデータを新しいテーブルに挿入することで、データをエクスポートします。...


コードの読みやすさを向上!SQL Serverで「#region」を使ってコードを分割する方法

SQL Server Management Studio (SSMS) では、#region ディレクティブを使ってコードを整理し、読みやすく、効率的に管理することができます。これは、コードブロックを折りたたみ/展開できる領域を作成する機能で、複雑なクエリやスクリプトを理解しやすくなります。...


SQL SQL SQL SQL Amazon で見る



SCOPE_IDENTITY() を使用して挿入された行の ID を取得する方法

SQL Server で INSERT ステートメントを使用して行を挿入した後、その行の ID を取得する必要がある場合があります。この ID は、多くの場合、主キーとして使用されます。方法挿入された行の ID を取得するには、次の 3 つの方法があります。