Sdílet prostřednictvím


IDENT_CURRENT (Transact-SQL)

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

Vrátí poslední hodnotu identity generovanou pro zadanou tabulku nebo pohled. 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
Je 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í hodnotu NULL při chybě 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 je 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_CURRENT je podobný identitním funkcím SQL Server 2000 (8.x) SCOPE_IDENTITY 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 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ž je hodnota IDENT_CURRENT NULL (protože tabulka nikdy neobsahovala řádky ani nebyla zkrácena), funkce IDENT_CURRENT vrátí počáteční hodnotu.

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. Například pokud příkaz INSERT selže kvůli porušení IGNORE_DUP_KEY, aktuální hodnota identity tabulky je stále zvýšena.

Při použití IDENT_CURRENT v pohledu, který obsahuje joiny, se vrátí NULL. 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 používání IDENT_CURRENT k předpovědi 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.

Examples

A. Vrácení poslední hodnoty identity generované 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. Porovnání identitních hodnot vrácených 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.*/  

Viz také

@@IDENTITY (Transact-SQL)
SCOPE_IDENTITY (Transact-SQL)
IDENT_INCR (Transact-SQL)
IDENT_SEED (Transact-SQL)
Výrazy (Transact-SQL)
Systémové funkce (Transact-SQL)