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

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL Azure нетAzure Synapse Analytics (хранилище данных SQL) нетParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Системная функция, которая возвращает значение идентификатора, вставленное последним.Is a system function that returns the last-inserted identity value.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic link icon Transact-SQL Syntax Conventions

СинтаксисSyntax

@@IDENTITY  

Типы возвращаемых данныхReturn Types

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

RemarksRemarks

После выполнения инструкций INSERT, SELECT INTO или массового копирования функция @@IDENTITY возвращает последнее значение идентификатора, сформированное инструкцией.After an INSERT, SELECT INTO, or bulk copy statement is completed, @@IDENTITY contains the last identity value that is generated by the statement. Если инструкция не обработала ни одной таблицы, содержащей столбцы идентификаторов, функция @@IDENTITY возвращает значение NULL.If the statement did not affect any tables with identity columns, @@IDENTITY returns NULL. Если при вставке нескольких строк формируется несколько значений идентификаторов, функция @@IDENTITY возвращает последнее сформированное значение.If multiple rows are inserted, generating multiple identity values, @@IDENTITY returns the last identity value generated. Если в результате инструкции срабатывает один или несколько триггеров, которые выполняют вставки, формирующие значения идентификаторов, вызов функции @@IDENTITY сразу же после завершения инструкции возвращает последнее значение идентификатора, сформированное триггерами.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. Если триггер срабатывает после выполнения вставки в таблицу, содержащую столбец идентификаторов, и триггер производит вставку в другую таблицу, в которой не содержится столбец идентификаторов, функция @@IDENTITY возвращает значение идентификатора первой вставки.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. Предыдущее значение @@IDENTITY не восстанавливается, если инструкция INSERT, SELECT INTO или массового копирования завершились ошибкой либо если выполняется откат транзакции.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.

Неудачно завершившиеся инструкции и транзакции могут изменить текущий идентификатор таблицы и создать пропуски в значениях столбца идентификаторов.Failed statements and transactions can change the current identity for a table and create gaps in the identity column values. Для значения идентификатора никогда не производится откат, несмотря на то, что транзакция, пытавшаяся вставить в таблицу значение, не была зафиксирована.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, текущее значение идентификатора для таблицы все равно увеличивается.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 возвращают последнее значение идентификатора, сформированное в любой таблице в текущем сеансе.@@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 возвращает значение идентификатора, сформированное для определенной таблицы в любом сеансе и в любой области.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. Чтобы получить значение идентификатора на другом сервере, выполните хранимую процедуру на удаленном или связанном сервере и используйте эту хранимую процедуру (которая выполняется в контексте удаленного или связанного сервера) для сбора значения идентификатора и его возврата вызывающему соединению на локальном сервере.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. Функция @@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 должны быть переписаны, чтобы использовать функцию 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

Следующий пример вставляет строку в таблицу, содержащую столбец идентификаторов (LocationID), и применяет функцию @@IDENTITY для отображения значения идентификатора, используемого в новой строке.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)