SQL Serverでは、T-SQL @@IDENTITYを使用できます。 現在のセッションで最後に挿入されたID値を返すシステム関数。
anyで生成された最後のID値を返すことに注意してください テーブル現在のセッション 。これは、IDENT_CURRENT()とは対照的です。 関数。指定されたテーブルに対して最後に挿入されたID値を返します。 。
SCOPE_IDENTITY() 関数は@@IDENTITYと非常によく似ています また、現在のセッションで最後に挿入されたID値も返します。違いは、SCOPE_IDENTITY() 現在のスコープに限定されます。
例1
@@IDENTITYの基本的なコード例を次に示します。 使用法。
SELECT @@IDENTITY AS [Last-Inserted Identity Value];
結果:
+--------------------------------+ | Last-Inserted Identity Value | |--------------------------------| | NULL | +--------------------------------+
これがNULLを返す理由 これは、SQL Serverに対して新しいセッションを開いたが、現在のセッション中にID列をまだ更新していないためです。
以下は、ID列の更新を行うコードです。
CREATE TABLE Cats(id int IDENTITY); CREATE TABLE Dogs(id int IDENTITY); INSERT Cats DEFAULT VALUES; INSERT Cats DEFAULT VALUES; SELECT @@IDENTITY AS [Last-Inserted Identity Value];
結果:
+--------------------------------+ | Last-Inserted Identity Value | |--------------------------------| | 2 | +--------------------------------+
ここでは、いくつかのテーブルを作成し、データを挿入してから、現在のID値を選択します。
そのテーブルに2つの行を挿入したため、現在のID値は2です。
次に、一方の行をもう一方のテーブルに挿入しましょう:
INSERT Dogs DEFAULT VALUES; SELECT @@IDENTITY AS [Last-Inserted Identity Value];
結果:
+--------------------------------+ | Last-Inserted Identity Value | |--------------------------------| | 1 | +--------------------------------+
このセッションで最後に挿入されたID値であるため、戻り値は1です。
例2– IDENT_CURRENT()との比較
ここでは、IDENT_CURRENT()と比較されます 。
SELECT
@@IDENTITY AS [@@IDENTITY],
IDENT_CURRENT('Cats') AS [IDENT_CURRENT('Cats')],
IDENT_CURRENT('Dogs') AS [IDENT_CURRENT('Dogs')];
結果:
+--------------+-------------------------+-------------------------+
| @@IDENTITY | IDENT_CURRENT('Cats') | IDENT_CURRENT('Dogs') |
|--------------+-------------------------+-------------------------|
| 1 | 2 | 1 |
+--------------+-------------------------+-------------------------+
前述のように、IDENT_CURRENT() 指定されたテーブルに基づいて結果を返します。したがって、これを使用して、各テーブルの最後のID値を見つけることができます。
例3–新しいセッションに切り替える
ここで、新しい接続を開いて@@IDENTITYを選択すると 繰り返しますが、これが起こります:
USE Test;
SELECT
@@IDENTITY AS [@@IDENTITY],
IDENT_CURRENT('Cats') AS [IDENT_CURRENT('Cats')],
IDENT_CURRENT('Dogs') AS [IDENT_CURRENT('Dogs')];
結果:
+--------------+-------------------------+-------------------------+
| @@IDENTITY | IDENT_CURRENT('Cats') | IDENT_CURRENT('Dogs') |
|--------------+-------------------------+-------------------------|
| NULL | 2 | 1 |
+--------------+-------------------------+-------------------------+
@@IDENTITY 新しいセッションのID列に何も挿入していないため、結果はNULLになります。
IDENT_CURRENT() 結果はセッションではなくテーブルに基づいているため、結果はNULLではありません。
@@ IDENTITY vs SCOPE_IDENTITY()vs IDENT_CURRENT()
SQLServerのIDENT_CURRENTと@@IDENTITYとSCOPE_IDENTITYの違いを参照してください:違いは何ですか?これら3つの機能の違いを説明する簡単な例をご覧ください。