Megosztás a következőn keresztül:


IDENT_CURRENT (Transact-SQL)

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

Visszaadja az utolsó, egy meghatározott tábla vagy nézet számára generált identitásértéket. 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

Null értéket ad vissza hiba esetén, 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 metaadatokat kibocsátó, beépített funkciók, mint az IDENT_CURRENT, akkor is visszaadhatják a NULL-ot, 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_CURRENT hasonló az SQL Server 2000 (8.x) identitásfüggvényeihez, SCOPE_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 munkafolyamat bármely táblájához generált utolsó identitásértéket minden területen.
  • SCOPE_IDENTITY adja vissza az aktuális ülésszak bármely táblája és a jelenlegi hatókör utolsó identitásértékét.

Ha a IDENT_CURRENT érték NULL (mert 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. Például, ha egy INSERT utasítás IGNORE_DUP_KEY megsértés miatt megbukik, a tábla aktuális identitásértéke továbbra is növelik.

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

Fontos

Legyen óvatos, amikor IDENT_CURRENT segítségével előrejelzid a következő generált identitásértéket. A tényleges generált érték eltérhet a IDENT_CURRENT plusz IDENT_INCR-tól más ülések által végrehajtott beillesztések miatt.

Példák

A. A megadott tábla utolsó identitásértékének visszaküldése

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. Összehasonlítva azonossági értékeket, amelyeket IDENT_CURRENT, @@IDENTITY és SCOPE_IDENTITY

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.*/  

Lásd még:

@@IDENTITY (Transact-SQL)
SCOPE_IDENTITY (Transact-SQL)
IDENT_INCR (Transact-SQL)
IDENT_SEED (Transact-SQL)
Kifejezések (Transact-SQL)
Rendszerfunkciók (Transact-SQL)