IDENT_CURRENT (Transact-SQL)

Изменения: 17 июля 2006 г.

Возвращает последнее значение идентификатора, созданное для указанной таблицы или представления в любом сеансе и области поиска.

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

Синтаксис

IDENT_CURRENT( 'table_name' )

Аргументы

  • table_name
    Имя таблицы, идентификатор которой возвращен. Аргумент table_name имеет тип varchar и не имеет значения по умолчанию.

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

numeric(38,0)

Исключения

Возвращает значение NULL в случае ошибки или отсутствия у участника разрешения на просмотр объекта.

В SQL Server 2005 пользователь может просматривать только те метаданные защищаемых объектов, которыми он владеет или на которые ему были предоставлены разрешения. Это означает, что встроенные функции, создающие метаданные, такие как IDENT_CURRENT, могут вернуть значение NULL в случае, если пользователь не имеет разрешений на объект. Дополнительные сведения см. в разделах Настройка видимости метаданных и Устранение неполадок, связанных с видимостью метаданных.

Замечания

Функция IDENT_CURRENT аналогична функциям удостоверений SQL Server 2000 SCOPE_IDENTITY и @@IDENTITY. Все три функции возвращают созданными последними значения идентификаторов. Однако эти функции различаются областью действия и сеансом, в соответствии с которыми определяется термин last.

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

Функция IDENT_CURRENT возвращает значение NULL, если вызвана для пустой таблицы или для таблицы без столбца идентификаторов.

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

Будьте внимательны при использовании функции IDENT_CURRENT для прогнозирования следующего создаваемого значения идентификатора. В действительности создаваемое значение может отличаться от полученного с помощью функции IDENT_CURRENT плюс IDENTITY_SEED, потому что в других сеансах могут выполняться операции вставки.

Примеры

A. Возврат последнего значения идентификатора, созданного для указанной таблицы

В следующем примере возвращается последнее значение идентификатора, созданное для таблицы Person.Address в базе данных AdventureWorks.

USE AdventureWorks;
GO
SELECT IDENT_CURRENT ('Person.Address') AS Current_Identity;
GO

Б. Сравнение значений идентификатора возвращаемых функциями IDENT_CURRENT, @@IDENTITY и SCOPE_IDENTITY

В следующем примере показаны различные идентификаторы, возвращаемые функциями IDENT_CURRENT, @@IDENTITY и SCOPE_IDENTITY.

USE AdventureWorks;
GO
IF OBJECT_ID(N't6', N'U') IS NOT NULL 
    DROP TABLE t6;
GO
IF OBJECT_ID(N't7', N'U') IS NOT NULL 
    DROP TABLE t7;
GO
CREATE TABLE t6(id int IDENTITY);
CREATE TABLE t7(id int IDENTITY(100,1));
GO
CREATE TRIGGER t6ins ON t6 FOR INSERT 
AS
BEGIN
   INSERT t7 DEFAULT VALUES
END;
GO
--End of trigger definition

SELECT id FROM t6;
--id is empty.

SELECT id FROM t7;
--ID is empty.

--Do the following in Session 1
INSERT t6 DEFAULT VALUES;
SELECT @@IDENTITY;
/*Returns the value 100. This was inserted by the trigger.*/

SELECT SCOPE_IDENTITY();
/* Returns the value 1. This was inserted by the 
INSERT statement two statements before this query.*/

SELECT IDENT_CURRENT('t7');
/* Returns value inserted into t7, that is in the trigger.*/

SELECT IDENT_CURRENT('t6');
/* Returns value inserted into t6. This was the INSERT statement four statements before this query.*/

-- Do the following in Session 2.
SELECT @@IDENTITY;
/* Returns NULL because there has been no INSERT action 
up to this point in this session.*/

SELECT SCOPE_IDENTITY();
/* Returns NULL because there has been no INSERT action 
up to this point in this scope in this session.*/

SELECT IDENT_CURRENT('t7');
/* Returns the last value inserted into t7.*/

См. также

Справочник

@@IDENTITY (Transact-SQL)
SCOPE_IDENTITY (Transact-SQL)
IDENT_INCR (Transact-SQL)
IDENT_SEED (Transact-SQL)
Выражения (Transact-SQL)
Системные функции (Transact-SQL)

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

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

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

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

17 июля 2006 г.

Новое содержимое
  • Добавлен раздел «Исключения».

14 апреля 2006 г.

Новое содержимое
  • Добавлено предложение с предостережением использования функции IDENT_CURRENT для прогнозирования следующего значения идентификатора.