IDENT_CURRENT (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-InstanzSQL-Datenbank in Microsoft Fabric

Die IDENT_CURRENT Systemfunktion gibt den zuletzt generierten Identitätswert für eine bestimmte Tabelle oder Ansicht zurück. Der letzte generierte Identitätswert kann sich auf eine beliebige Sitzung und einen beliebigen Gültigkeitsbereich beziehen.

Transact-SQL-Syntaxkonventionen

Syntax

IDENT_CURRENT( 'table_or_view' )

Argumente

table_or_view

Der Name der Tabelle oder Ansicht, deren Identitätswert zurückgegeben wird. table_or_view ist vom Datentyp varchar und hat keinen Standardwert.

Rückgabetypen

numeric(@@MAXPRECISION,0))

Ausnahmen

Gibt NULL einen Fehler zurück oder wenn ein Aufrufer nicht über die Berechtigung zum Anzeigen des Objekts verfügt.

In SQL Server kann ein Benutzer nur die Metadaten sicherungsfähiger Elemente anzeigen, bei denen der Benutzer entweder der Besitzer ist oder für die dem Benutzer eine Berechtigung erteilt wurde. Das bedeutet, dass metadatenaussendende, eingebaute Funktionen wie so IDENT_CURRENT etwas zurückgegeben NULL werden können, wenn der Benutzer keine Berechtigung für das Objekt hat. Weitere Informationen finden Sie unter Metadata Visibility Configuration.

Hinweise

IDENT_CURRENTähnelt den Identitätsfunktionen SCOPE_IDENTITY des SQL Server 2000 (8.x) und @@IDENTITY. Alle drei Funktionen geben die zuletzt generierten Identitätswerte zurück. Der Gültigkeitsbereich und die Sitzung, für die last definiert ist, unterscheiden sich jedoch bei jeder dieser drei Funktionen:

  • IDENT_CURRENT gibt den zuletzt für eine bestimmte Tabelle in jeder Sitzung und jedem Scope generierten Identitätswert zurück.
  • @@IDENTITY gibt den zuletzt generierten Identitätswert für jede Tabelle in der aktuellen Sitzung über alle Scopes hinweg zurück.
  • SCOPE_IDENTITY gibt den zuletzt generierten Identitätswert für jede Tabelle in der aktuellen Sitzung und den aktuellen Scope zurück.

Wenn der IDENT_CURRENT Wert ( NULL weil die Tabelle nie Zeilen enthielt oder abgeschnitten wurde), gibt die IDENT_CURRENT Funktion den Startwert zurück.

Fehlgeschlagene Anweisungen oder Transaktionen können die aktuelle Identität für eine Tabelle ändern und zu Lücken in den Identitätsspaltenwerten führen. Für den Identitätswert erfolgt kein Rollback, auch wenn für die Transaktion, die versuchte, den Wert in die Tabelle einzufügen, kein Commit ausgeführt wird. Wenn beispielsweise eine INSERT Anweisung aufgrund eines IGNORE_DUP_KEY Verstoßes fehlschlägt, wird der aktuelle Identitätswert für die Tabelle noch erhöht.

Wenn IDENT_CURRENT man auf einer Ansicht verwendet wird, die Joins enthält, NULL wird zurückgegeben. Dies ist unabhängig davon, ob nur eine oder mehrere verbundene Tabellen über eine Identitätsspalte verfügen.

Wichtig

Seien Sie vorsichtig bei IDENT_CURRENT der Vorhersage des nächsten generierten Identitätswerts. Der tatsächlich generierte Wert kann sich von IDENT_CURRENT Plus IDENT_INCR unterscheiden, da Einfügungen in anderen Sitzungen durchgeführt wurden.

Die IDENT_CURRENT Funktion ist für Identitätsspalten in Fabric Data Warehouse nicht verfügbar.

Beispiele

A. Gib den zuletzt generierten Identitätswert für eine bestimmte Tabelle zurück

Im folgenden Beispiel wird der letzte Identitätswert zurückgegeben, der für die Person.Address-Tabelle in der AdventureWorks2025-Datenbank generiert wurde.

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

B. Vergleichen Sie die von IDENT_CURRENT, @@IDENTITY und SCOPE_IDENTITY zurückgegebenen Identitätswerte

Das folgende Beispiel zeigt verschiedene Identitätswerte, die von IDENT_CURRENT, @@IDENTITY und SCOPE_IDENTITY zurückgegeben werden.

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