@@IDENTITY (Transact-SQL)

Изменения: 12 декабря 2006 г.

Системная функция, которая возвращает значение идентификатора, вставленное последним.

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

Синтаксис

@@IDENTITY

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

numeric(38,0)

Замечания

После завершения инструкций INSERT, SELECT INTO или массового копирования функция @@IDENTITY возвращает последнее значение идентификатора, сформированное инструкцией. Если инструкция не обработала ни одной таблицы, содержащей столбцы идентификаторов, функция @@IDENTITY возвращает значение NULL. Когда при вставлении нескольких строк формируется несколько значений идентификаторов, функция @@IDENTITY возвращает последнее сформированное значение. Если в результате инструкции срабатывает один или несколько триггеров, которые выполняют вставки, формирующие значения идентификаторов, вызов функции @@IDENTITY сразу же после завершения инструкции возвращает последнее значение идентификатора, сформированное триггерами. Если триггер срабатывает после выполнения вставки в таблицу, содержащую столбец идентификаторов и триггер производит вставку в другую таблицу, в которой не содержится столбец идентификаторов, функция @@IDENTITY возвращает значение идентификатора первой вставки. Предыдущее значение @@IDENTITY не восстанавливается, если инструкции INSERT, SELECT INTO или массового копирования завершились ошибкой либо если выполняется откат транзакции.

Инструкции и транзакции, завершившиеся ошибкой, могут изменять текущую идентификацию для таблицы и вызывать появление пропусков в значениях столбца идентификаторов. Откат значения идентификатора не производится никогда, несмотря на то, что транзакция, пытавшаяся вставить в таблицу значение, не была зафиксирована. Например, если инструкция INSERT привела к ошибке из-за нарушения ограничения IGNORE_DUP_KEY, текущее значение идентификатора для таблицы все равно увеличивается.

Функции @@IDENTITY, SCOPE_IDENTITY и IDENT_CURRENT похожи, поскольку все они возвращают последнее значение, вставленное в столбец IDENTITY таблицы.

Функции @@IDENTITY и SCOPE_IDENTITY возвращают последнее значение идентификатора, сформированное в любой таблице в текущем сеансе. Однако функция SCOPE_IDENTITY возвращает значение только в пределах текущей области, в то время как функция @@IDENTITY не ограничена определенной областью.

Функция IDENT_CURRENT не ограничена областью и сеансом, но ограничена определенной таблицей. Функция IDENT_CURRENT возвращает значение идентификатора, сформированное для определенной таблицы в любом сеансе и в любой области. Дополнительные сведения см. в разделе IDENT_CURRENT (Transact-SQL).

Областью функции @@IDENTITY является текущий сеанс на локальном компьютере, на котором она выполняется. Эту функцию невозможно применить к удаленным или связанным серверам. Чтобы получить значение идентификатора на другом сервере, выполните хранимую процедуру на удаленном или связанном сервере и используйте эту хранимую процедуру (которая выполняется в контексте удаленного или связанного сервера) для сбора значения идентификатора и его возврата вызывающему соединению на локальном сервере.

Репликация может затронуть значение функции @@IDENTITY, поскольку она используется в триггерах и хранимых процедурах репликации. Функция @@IDENTITY не является надежным признаком последнего созданного пользователем идентификатора, если столбец является частью статьи репликации. Вместо @@IDENTITY можно использовать функцию SCOPE_IDENTITY(). Дополнительные сведения см. в подразделе «Примеры» раздела SCOPE_IDENTITY (Transact-SQL).

ms187342.note(ru-ru,SQL.90).gifПримечание.
Для применения функции SCOPE_IDENTITY() необходимо перезаписать вызывающую хранимую процедуру или инструкцию Transact-SQL. При этом будет возвращен последний идентификатор, который использовался в области этой пользовательской инструкции, но не идентификатор из области вложенного триггера, который используется репликацией.

Примеры

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

USE AdventureWorks;
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

См. также

Справочник

Системные функции (Transact-SQL)
CREATE TABLE (Transact-SQL)
IDENT_CURRENT (Transact-SQL)
INSERT (Transact-SQL)
SCOPE_IDENTITY (Transact-SQL)
SELECT (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

12 декабря 2006 г.

Новое содержимое
  • Добавлены сведения о функции @@IDENTITY и репликации.