Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL 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.
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)
IDENT_INCR (Transact-SQL)
IDENT_SEED (Transact-SQL)
Výrazy (Transact-SQL)
Systémové funkce (Transact-SQL)