Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
Возврат последнего значения идентификатора, созданного для указанной таблицы или представления. Последнее созданное значение идентификатора может относиться к любому сеансу и любой области.
Соглашения о синтаксисе Transact-SQL
Синтаксис
IDENT_CURRENT( 'table_or_view' )
Аргументы
table_or_view
Имя таблицы или представления, идентификатор которых возвращается. Аргумент table_or_view имеет тип varchar и не имеет значения по умолчанию.
Типы возвращаемых данных
numeric(@@MAXPRECISION,0))
Исключения
Возвращает значение NULL в случае ошибки или если участник не имеет разрешений для просмотра объекта.
В SQL Server пользователь может просматривать только метаданные защищаемых объектов, принадлежащих пользователю или которым предоставлено разрешение. Это означает, что встроенные функции, создающие метаданные, такие как IDENT_CURRENT, могут вернуть значение NULL в случае, если пользователь не имеет разрешений на объект. Дополнительные сведения см. в разделе Metadata Visibility Configuration.
Замечания
Функция IDENT_CURRENT аналогична функциям идентификаторов SCOPE_IDENTITY и @@IDENTITY в SQL Server 2000 (8.x). Все три функции возвращают созданными последними значения идентификаторов. Однако эти функции различаются областью действия и сеансом, в соответствии с которыми определяется термин last.
- IDENT_CURRENT возвращает последнее значение идентифицирующего столбца, созданное для конкретной таблицы в любом сеансе и области поиска.
- @@IDENTITY возвращает последнее значение удостоверения, созданное для любой таблицы в текущем сеансе, во всех областях.
- SCOPE_IDENTITY возвращает последнее значение идентификатора, созданное для любой таблицы в текущем сеансе по текущей области поиска.
Если значение IDENT_CURRENT равно NULL (потому что таблица никогда не содержала строк или была усечена), функция IDENT_CURRENT возвращает начальное значение.
Неудачно завершившиеся инструкции и транзакции могут изменить текущий идентификатор таблицы и создать пропуски в значениях столбца идентификаторов. Для значения идентификатора никогда не производится откат, несмотря на то, что транзакция, пытавшаяся вставить в таблицу значение, не была зафиксирована. Например, если инструкция INSERT привела к ошибке из-за нарушения ограничения IGNORE_DUP_KEY, текущее значение идентификатора для таблицы все равно увеличивается.
При использовании функции IDENT_CURRENT в представлении, содержащем объединения, возвращается значение NULL. Это не зависит от того, есть ли столбец идентификаторов только в одной или нескольких объединяемых таблицах.
Внимание
Будьте внимательны при использовании функции IDENT_CURRENT для прогнозирования следующего создаваемого значения идентификатора. Фактически создаваемое значение может отличаться от полученного с помощью функций IDENT_CURRENT и IDENT_INCR, потому что в других сеансах тоже могут выполняться операции вставки.
Примеры
А. Возврат последнего значения идентификатора, созданного для указанной таблицы
В следующем примере возвращается последнее значение идентификатора, созданное для таблицы Person.Address в базе данных AdventureWorks2025.
USE AdventureWorks2022;
GO
SELECT IDENT_CURRENT ('Person.Address') AS Current_Identity;
GO
B. Сравнение значений удостоверений, возвращаемых IDENT_CURRENT, @@IDENTITY и SCOPE_IDENTITY
В следующем примере показаны различные идентификаторы, возвращаемые функциями IDENT_CURRENT, @@IDENTITY и SCOPE_IDENTITY.
USE AdventureWorks2022;
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;
--IDs 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)