@@IDENTITY (Transact-SQL)@@IDENTITY (Transact-SQL)

適用対象: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

最後に挿入された ID 値を返すシステム関数です。Is a system function that returns the last-inserted identity value.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

@@IDENTITY  

戻り値の型Return Types

numeric(38,0)numeric(38,0)

RemarksRemarks

INSERT ステートメント、SELECT INTO ステートメント、または一括コピーが終了すると、@@IDENTITY にはステートメントが最後に生成した ID 値が含まれます。After an INSERT, SELECT INTO, or bulk copy statement is completed, @@IDENTITY contains the last identity value that is generated by the statement. ID 列のあるテーブルがステートメントによって影響されなかった場合、@@IDENTITY は NULL 値を返します。If the statement did not affect any tables with identity columns, @@IDENTITY returns NULL. 複数の行を挿入して、複数の ID 値を生成する場合、@@IDENTITY は最後に生成した ID 値を返します。If multiple rows are inserted, generating multiple identity values, @@IDENTITY returns the last identity value generated. ステートメントが、ID 値を生成する挿入操作を実行する 1 つ以上のトリガーを起動する場合、このステートメントの直後で @@IDENTITY を呼び出すと、トリガーにより最後に生成された ID 値が返されます。If the statement fires one or more triggers that perform inserts that generate identity values, calling @@IDENTITY immediately after the statement returns the last identity value generated by the triggers. ID 列のあるテーブルで挿入操作を行った後に起動されるトリガーによって、ID 列のない別のテーブルへの挿入操作が実行される場合、@@IDENTITY は最初の挿入の ID 値を返します。If a trigger is fired after an insert action on a table that has an identity column, and the trigger inserts into another table that does not have an identity column, @@IDENTITY returns the identity value of the first insert. INSERT ステートメントか SELECT INTO ステートメント、または一括コピーが失敗した場合、あるいは、トランザクションがロールバックされた場合、@@IDENTITY 値は前の設定に戻りません。The @@IDENTITY value does not revert to a previous setting if the INSERT or SELECT INTO statement or bulk copy fails, or if the transaction is rolled back.

失敗したステートメントとトランザクションによって、テーブルに対する現在の ID が変更され、ID 列値に差異が生じる可能性があります。Failed statements and transactions can change the current identity for a table and create gaps in the identity column values. ID 値がロールバックされることはありません。これは、テーブルに値を挿入するトランザクションがコミットされない場合でも同じです。The identity value is never rolled back even though the transaction that tried to insert the value into the table is not committed. たとえば、INSERT ステートメントが IGNORE_DUP_KEY 違反のために失敗しても、テーブルの現在の ID 値は増分されます。For example, if an INSERT statement fails because of an IGNORE_DUP_KEY violation, the current identity value for the table is still incremented.

@@IDENTITY、SCOPE_IDENTITY、および IDENT_CURRENT は、すべてテーブルの IDENTITY 列に最後に挿入された値を返すという点で似ています。@@IDENTITY, SCOPE_IDENTITY, and IDENT_CURRENT are similar functions because they all return the last value inserted into the IDENTITY column of a table.

@@IDENTITY と SCOPE_IDENTITY は、現在のセッション内の任意のテーブルで生成された最後の ID 値を返します。@@IDENTITY and SCOPE_IDENTITY return the last identity value generated in any table in the current session. ただし、SCOPE_IDENTITY が返す値は、現在のスコープの範囲内に限られます。@@IDENTITY の場合は、特定のスコープに限定されません。However, SCOPE_IDENTITY returns the value only within the current scope; @@IDENTITY is not limited to a specific scope.

IDENT_CURRENT はスコープとセッションには限定されませんが、特定のテーブルに限定されます。IDENT_CURRENT is not limited by scope and session; it is limited to a specified table. IDENT_CURRENT は、任意のセッションおよび任意のスコープ内の特定のテーブルに対して生成された ID 値を返します。IDENT_CURRENT returns the identity value generated for a specific table in any session and any scope. 詳しくは、「IDENT_CURRENT (Transact-SQL)」をご覧ください。For more information, see IDENT_CURRENT (Transact-SQL).

@@IDENTITY 関数のスコープは、実行されるローカル サーバーの現在のセッションです。The scope of the @@IDENTITY function is current session on the local server on which it is executed. この関数は、リモート サーバーまたはリンク サーバーには適用できません。This function cannot be applied to remote or linked servers. 別のサーバーで ID 値を取得するには、そのリモート サーバーまたはリンク サーバーでストアド プロシージャを実行し、(リモート サーバーまたはリンク サーバーのコンテキスト内で実行されている) そのストアド プロシージャが ID 値を収集し、ローカル サーバー上の呼び出し元の接続にこれを返すようにします。To obtain an identity value on a different server, execute a stored procedure on that remote or linked server and have that stored procedure (which is executing in the context of the remote or linked server) gather the identity value and return it to the calling connection on the local server.

@@IDENTITY の値はレプリケーション トリガーやストアド プロシージャ内で使用されるため、レプリケーションによって影響を受けることがあります。Replication may affect the @@IDENTITY value, since it is used within the replication triggers and stored procedures. 列がレプリケーション アーティクルの一部である場合、ユーザーが作成した最新の ID として @@IDENTITY を信頼することはできません。@@IDENTITY is not a reliable indicator of the most recent user-created identity if the column is part of a replication article. @@IDENTITY の代わりに、SCOPE_IDENTITY() 関数の構文を使用できます。You can use the SCOPE_IDENTITY() function syntax instead of @@IDENTITY. 詳細については、「SCOPE_IDENTITY (Transact-SQL)」を参照してください。For more information, see SCOPE_IDENTITY (Transact-SQL)

注意

呼び出し元のストアド プロシージャまたは Transact-SQLTransact-SQL ステートメントは、そのユーザーのステートメントのスコープ内で使用される最新の id と、レプリケーションで使用する入れ子になったトリガーのスコープ内での id ではなく返す SCOPE_IDENTITY() 関数を使用して書き直す必要があります。The calling stored procedure or Transact-SQLTransact-SQL statement must be rewritten to use the SCOPE_IDENTITY() function, which returns the latest identity used within the scope of that user statement, and not the identity within the scope of the nested trigger used by replication.

使用例Examples

次の例では、ID 列 (LocationID) のあるテーブルに行を挿入し、@@IDENTITY を使用して新しい行で使用する ID 値を表示します。The following example inserts a row into a table with an identity column (LocationID) and uses @@IDENTITY to display the identity value used in the new row.

USE AdventureWorks2012;  
GO  
--Display the value of LocationID in the last row in the table.  
SELECT MAX(LocationID) FROM Production.Location;  
GO  
INSERT INTO Production.Location (Name, CostRate, Availability, ModifiedDate)  
VALUES ('Damaged Goods', 5, 2.5, GETDATE());  
GO  
SELECT @@IDENTITY AS 'Identity';  
GO  
--Display the value of LocationID of the newly inserted row.  
SELECT MAX(LocationID) FROM Production.Location;  
GO  

参照See Also

システム関数 (Transact-SQL) System Functions (Transact-SQL)
CREATE TABLE (Transact-SQL) CREATE TABLE (Transact-SQL)
IDENT_CURRENT (Transact-SQL) IDENT_CURRENT (Transact-SQL)
INSERT (Transact-SQL) INSERT (Transact-SQL)
SCOPE_IDENTITY (Transact-SQL) SCOPE_IDENTITY (Transact-SQL)
SELECT (Transact-SQL)SELECT (Transact-SQL)