IDENT_CURRENT (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Systémová IDENT_CURRENT funkce vrací poslední identitní hodnotu generovanou pro zadanou tabulku nebo zobrazení. Poslední generovaná hodnota identity může být pro libovolnou relaci a jakýkoli rozsah.

Transact-SQL konvence syntaxe

Syntaxe

IDENT_CURRENT( 'table_or_view' )

Arguments

table_or_view

Název tabulky nebo pohledu, jehož identitní hodnota je vrácena. table_or_view je varchar, bez defaultu.

Návratové typy

numeric(@@MAXPRECISION,0))

Exceptions

Vrátí NULL chybu nebo pokud volající nemá oprávnění k zobrazení objektu.

V SYSTÉMU SQL Server může uživatel zobrazit pouze metadata zabezpečitelných objektů, které uživatel vlastní nebo na kterých má uživatel udělené oprávnění. To znamená, že vestavěné funkce vysílající metadata, jako například , IDENT_CURRENT mohou vrátit NULL , pokud uživatel nemá žádné oprávnění k objektu. Další informace naleznete v kapitole Konfigurace viditelnosti metadat.

Poznámky

IDENT_CURRENTje podobný identitním funkcím SCOPE_IDENTITY SQL Server 2000 (8.x) a @@IDENTITY. Všechny tři funkce vracejí poslední generované hodnoty identity. Rozsah a seance, na které je poslední definováno u každé z těchto funkcí, se však liší:

  • IDENT_CURRENT vrací poslední hodnotu identity generovanou pro konkrétní tabulku v jakékoli relaci a v jakémkoli rozsahu.
  • @@IDENTITY vrací poslední hodnotu identity generovanou pro libovolnou tabulku v aktuální relaci, napříč všemi rozsahy.
  • SCOPE_IDENTITY vrací poslední hodnotu identity generovanou pro libovolnou tabulku v aktuální relaci a aktuálním rozsahu.

Když IDENT_CURRENT je hodnota (NULLprotože tabulka nikdy neobsahovala řádky ani nebyla zkrácena), funkce vrátí počáteční hodnotu.IDENT_CURRENT

Neúspěšné příkazy a transakce mohou změnit aktuální identitu tabulky a vytvořit mezery v hodnotách sloupců identity. Hodnota identity se nikdy nevrátí zpět, i když transakce, která se pokusila hodnotu vložit do tabulky, není potvrzena. Pokud například INSERT příkaz selže z důvodu IGNORE_DUP_KEY porušení, aktuální hodnota identity tabulky se stále zvýší.

Při použití IDENT_CURRENT na pohledu, který obsahuje spoje, NULL se vrátí. To platí bez ohledu na to, zda má sloupec Identita pouze jedna nebo více spojených tabulek.

Důležité

Buďte opatrní při předpovídání IDENT_CURRENT další generované hodnoty identity. Skutečná generovaná hodnota se může lišit od IDENT_CURRENT plus IDENT_INCR kvůli vložením prováděným jinými relacemi.

Funkce IDENT_CURRENT není dostupná pro identifikační sloupce v Fabric Data Warehouse.

Examples

A. Vraťte poslední hodnotu identity generovanou pro zadanou tabulku

Následující příklad vrací poslední hodnotu identity generovanou Person.Address pro tabulku AdventureWorks2025 v databázi.

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

B. Porovnejte hodnoty identity vrácené IDENT_CURRENT, @@IDENTITY a SCOPE_IDENTITY

Následující příklad ukazuje různé hodnoty identity, které jsou IDENT_CURRENTvráceny , @@IDENTITY, a 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.*/