@@ УДОСТОВЕРЕНИЕ (Transact-SQL)@@IDENTITY (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ ЭТОЙ СТАТЬИ:даSQL Server (начиная с 2008)даБаза данных SQL AzureнетХранилище данных SQL AzureнетParallel Data WarehouseTHIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse 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)

ЗамечанияRemarks

После инструкции 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, 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. Можно использовать функцию SCOPE_IDENTITY() вместо @@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)