Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
@@IDENTITY — системная функция, которая возвращает последнее вставленное значение тождества.
Соглашения о синтаксисе Transact-SQL
Синтаксис
@@IDENTITY
Типы возвращаемых данных
numeric(38,0)
Замечания
После завершения INSERTSELECT 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 не является надёжным индикатором самой последней пользовательской идентичности, если столбец является частью статьи по репликации. Можно использовать синтаксис SCOPE_IDENTITY() функций вместо @@IDENTITY. Дополнительные сведения см. в статье SCOPE_IDENTITY (Transact-SQL).
Примечание.
Вызывающую хранимую процедуру или инструкцию Transact-SQL следует изменить так, чтобы они использовали функцию SCOPE_IDENTITY(), которая возвращает последний идентификатор, использованный в области этой пользовательской инструкции, а не идентификатор из области используемого репликацией вложенного триггера.
Примеры
Следующий пример вставляет строку в таблицу, содержащую столбец идентификаторов (LocationID), и применяет функцию @@IDENTITY для отображения значения идентификатора, используемого в новой строке.
USE AdventureWorks2022;
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