IDENT_CURRENT (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

A IDENT_CURRENT rendszerfüggvény egy meghatározott tábla vagy nézet számára generált utolsó identitásértéket adja vissza. Az utolsó generált identitásérték bármely ülésre és bármilyen területre vonatkozhat.

Transact-SQL szintaxis konvenciók

Szemantika

IDENT_CURRENT( 'table_or_view' )

Arguments

table_or_view

Az a tábla vagy nézet neve, amelynek azonosító értéke visszakerül. table_or_view a varchar, alapértelmezett nélkül.

Visszatérési típusok

numeric(@@MAXPRECISION,0))

Exceptions

Hibát ad NULL vissza, vagy ha a hívó nem rendelkezik engedéllyel az objektum megtekintéséhez.

Az SQL Serverben a felhasználó csak azoknak a biztonságos objektumoknak a metaadatait tekintheti meg, amelyek a felhasználó tulajdonában vannak, vagy amelyekhez a felhasználó engedélyt kapott. Ez azt jelenti, hogy metaadatot kibocsátó, beépített funkciók, IDENT_CURRENT például visszatérhetnek NULL , ha a felhasználónak nincs engedélye az objektumra. További információ: Metaadatok láthatóságának konfigurációja.

Megjegyzések

IDENT_CURRENThasonló az SQL Server 2000 (8.x) azonosító függvényeihezSCOPE_IDENTITY, és @@IDENTITY. Mindhárom függvény visszaadja az utolsó generált identitásértékeket. Azonban az egyes függvényekben az utolsó meghatározás hatóköre és ülése eltér:

  • IDENT_CURRENT visszaadja az utolsó identitásértéket, amelyet egy adott tábla generált bármely ülésen és bármely hatókörben.
  • @@IDENTITY visszaadja az aktuális ülésszak bármely táblájához generált utolsó identitásértéket, minden hatókörben.
  • SCOPE_IDENTITY visszaadja az aktuális session bármely táblája és a jelenlegi scope-i tábla utolsó identitásértékét.

Ha az IDENT_CURRENT érték NULL (mivel a tábla soha nem tartalmazott sorokat, vagy lerövidítették), a IDENT_CURRENT függvény visszaadja a magértéket.

A sikertelen utasítások és tranzakciók megváltoztathatják a tábla aktuális identitását, és réseket hozhatnak létre az identitásoszlop értékeiben. Az identitásérték soha nem fordul vissza, még akkor sem, ha az a tranzakció, amely megpróbálta beilleszteni az értéket a táblába, nem van kötelezve. Ha például egy INSERTIGNORE_DUP_KEY utasítás egy szabálysértés miatt meghiúsul, a tábla jelenlegi identitásértéke továbbra is növekszik.

Ha olyan nézeten használjuk IDENT_CURRENT , amely tartalmaz csatlakozásokat, NULL visszaadja a választ. Ez függetlenül attól, hogy csak egy vagy több összekapcsolt táblázat rendelkezik-e Identity oszloptal.

Fontos

Legyen óvatos, amikor a következő generált identitásértéket előrejelzik IDENT_CURRENT . A tényleges generált érték eltérhet a IDENT_CURRENT plusztól IDENT_INCR , mivel más szekciók által végrehajtott beillesztések is vannak.

A IDENT_CURRENT függvény nem elérhető Fabric Data Warehouse azonosító oszlopaihoz.

Példák

A. A megadott tábla utolsó identitásértékét adja vissza

A következő példa adja vissza az adatbázisban a Person.Address tábla AdventureWorks2025 utolsó identitásértékét.

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

B. Hasonlítsd össze az IDENT_CURRENT, @@IDENTITY és SCOPE_IDENTITY által visszaadott identitásértékeket

A következő példa bemutatja azokat az identitásértékeket, amelyeket , IDENT_CURRENT@@IDENTITY, és 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.*/