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
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.
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_CURRENTvrací poslední hodnotu identity generovanou pro konkrétní tabulku v jakékoli relaci a v jakémkoli rozsahu. -
@@IDENTITYvrací poslední hodnotu identity generovanou pro libovolnou tabulku v aktuální relaci, napříč všemi rozsahy. -
SCOPE_IDENTITYvrací 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.*/
Související obsah
- @@IDENTITY (Transact-SQL)
-
SCOPE_IDENTITY (Transact-SQL) - IDENT_INCR (Transact-SQL)
- IDENT_SEED (Transact-SQL)
- Výrazy (Transact-SQL)
- Systémové funkce (Transact-SQL)