Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к: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