IDENT_CURRENT (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Returnerar det senaste identitetsvärdet som genererats för en specificerad tabell eller vy. Det sista identitetsvärdet som genereras kan vara för vilken session som helst och vilket scope som helst.

Transact-SQL syntaxkonventioner

Syntax

IDENT_CURRENT( 'table_or_view' )  

Arguments

table_or_view
Är namnet på tabellen eller vyn vars identitetsvärde returneras. table_or_view är varchar, utan standard.

Returtyper

numerisk(@@MAXPRECISION,0))

Exceptions

Returnerar NULL vid fel eller om en anropare inte har behörighet att visa objektet.

I SQL Server kan en användare bara visa metadata för skyddsbara objekt som användaren äger eller som användaren har beviljats behörighet till. Detta innebär att inbyggda funktioner som IDENT_CURRENT metadata kan returnera NULL om användaren inte har någon behörighet på objektet. För mer information, se inställningar för metadatasynlighet.

Anmärkningar

IDENT_CURRENT liknar SQL Server 2000 (8.x) identitetsfunktionerna SCOPE_IDENTITY och @@IDENTITY. Alla tre funktioner returnerar senast genererade identitetsvärden. Dock skiljer sig omfattningen och sessionen där den sista definieras i var och en av dessa funktioner:

  • IDENT_CURRENT returnerar det senaste identitetsvärdet som genererats för en specifik tabell i varje session och varje scope.
  • @@IDENTITY returnerar det senaste identitetsvärdet som genererats för en tabell i den aktuella sessionen, över alla scopes.
  • SCOPE_IDENTITY returnerar det senaste identitetsvärdet som genererats för varje tabell i den aktuella sessionen och det aktuella scope.

När IDENT_CURRENT-värdet är NULL (eftersom tabellen aldrig har innehållit rader eller har trunkerats), returnerar IDENT_CURRENT-funktionen frövärdet.

Misslyckade satser och transaktioner kan ändra den aktuella identiteten för en tabell och skapa luckor i identitetskolumnens värden. Identitetsvärdet rullas aldrig tillbaka även om transaktionen som försökte infoga värdet i tabellen inte är committad. Till exempel, om ett INSERT-uttalande misslyckas på grund av ett IGNORE_DUP_KEY-brott, ökar fortfarande det aktuella identitetsvärdet för tabellen.

När man använder IDENT_CURRENT på en vy som innehåller joins returneras NULL. Detta gäller oavsett om bara en eller flera anslutna tabeller har en Identitetskolumn.

Viktigt!

Var försiktig när du använder IDENT_CURRENT för att förutsäga nästa genererade identitetsvärde. Det faktiska genererade värdet kan skilja sig från IDENT_CURRENT plus IDENT_INCR på grund av insättningar som utförts av andra sessioner.

Examples

A. Returnerar det senaste identitetsvärdet som genererats för en specificerad tabell

Följande exempel returnerar det senaste identitetsvärdet som genererats för Person.Address tabellen i databasen AdventureWorks2025 .

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

B. Jämförelse av identitetsvärden som returneras av IDENT_CURRENT, @@IDENTITY och SCOPE_IDENTITY

Följande exempel visar de olika identitetsvärden som returneras av IDENT_CURRENT, @@IDENTITY, och 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.*/  

Se även

@@IDENTITY (Transact-SQL)
SCOPE_IDENTITY (Transact-SQL)
IDENT_INCR (Transact-SQL)
IDENT_SEED (Transact-SQL)
Uttryck (Transact-SQL)
Systemfunktioner (Transact-SQL)