Delen via


IDENT_CURRENT (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Geeft de laatst gegenereerde identiteitswaarde terug voor een opgegeven tabel of weergave. De laatste gegenereerde identiteitswaarde kan voor elke sessie en elke scope zijn.

Transact-SQL syntaxis-conventies

Syntaxis

IDENT_CURRENT( 'table_or_view' )  

Arguments

table_or_view
Is de naam van de tabel of weergave waarvan de identiteitswaarde wordt teruggegeven. table_or_view is varchar, zonder standaard.

Retourtypen

numeric(@@MAXPRECISION,0))

Exceptions

Retourneert NULL bij fout of als een aanroeper niet gemachtigd is om het object weer te geven.

In SQL Server kan een gebruiker alleen de metagegevens bekijken van beveiligbare items waarvan de gebruiker eigenaar is of waarvoor de gebruiker is gemachtigd. Dit betekent dat metadata-uitzendende, ingebouwde functies zoals IDENT_CURRENT NULL kunnen teruggeven als de gebruiker geen toestemming heeft voor het object. Zie Zichtbaarheidsconfiguratie voor metagegevensvoor meer informatie.

Opmerkingen

IDENT_CURRENT lijkt op de SQL Server 2000 (8.x) identiteitsfuncties SCOPE_IDENTITY en @@IDENTITY. Alle drie de functies geven laatst gegenereerde identiteitswaarden terug. De scope en sessie waarop de laatste wordt gedefinieerd verschillen echter in elk van deze functies:

  • IDENT_CURRENT geeft de laatst gegenereerde identiteitswaarde terug voor een specifieke tabel in elke sessie en elke scope.
  • @@IDENTITY geeft de laatst gegenereerde identiteitswaarde terug voor elke tabel in de huidige sessie, over alle scopes.
  • SCOPE_IDENTITY geeft de laatst gegenereerde identiteitswaarde terug voor elke tabel in de huidige sessie en de huidige scope.

Wanneer de IDENT_CURRENT-waarde NULL is (omdat de tabel nooit rijen heeft bevat of is afgekapt), geeft de IDENT_CURRENT-functie de seedwaarde terug.

Mislukte statements en transacties kunnen de huidige identiteit van een tabel veranderen en gaten creëren in de identiteitskolomwaarden. De identiteitswaarde wordt nooit teruggerold, ook al is de transactie die probeerde de waarde in de tabel in te voegen niet committed. Als bijvoorbeeld een INSERT-instructie faalt door een IGNORE_DUP_KEY-overtreding, wordt de huidige identiteitswaarde voor de tabel nog steeds verhoogd.

Wanneer IDENT_CURRENT wordt gebruikt op een view die joins bevat, wordt NULL teruggegeven. Dit geldt ongeacht of slechts één of meer dan één gekoppelde tabel een Identiteit-kolom heeft.

Belangrijk

Wees voorzichtig bij het gebruik van IDENT_CURRENT om de volgende gegenereerde identiteitswaarde te voorspellen. De daadwerkelijk gegenereerde waarde kan verschillen van IDENT_CURRENT plus IDENT_INCR vanwege inserties uitgevoerd door andere sessies.

Voorbeelden

Eén. Het teruggeven van de laatste identiteitswaarde die voor een gespecificeerde tabel is gegenereerd

Het volgende voorbeeld geeft de laatst gegenereerde identiteitswaarde voor de Person.Address tabel in de AdventureWorks2025 database terug.

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

B. Het vergelijken van identiteitswaarden die door IDENT_CURRENT, @@IDENTITY en SCOPE_IDENTITY worden teruggegeven

Het volgende voorbeeld toont de verschillende identiteitswaarden die worden teruggegeven door IDENT_CURRENT, @@IDENTITY, en 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.*/  

Zie ook

@@IDENTITY (Transact-SQL)
SCOPE_IDENTITY (Transact-SQL)
IDENT_INCR (Transact-SQL)
IDENT_SEED (Transact-SQL)
Expressies (Transact-SQL)
Systeemfuncties (Transact-SQL)