IDENT_CURRENT (Transact-SQL)IDENT_CURRENT (Transact-SQL)

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2008)sìDatabase SQL di AzurenoAzure SQL Data Warehouse noParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Restituisce l'ultimo valore Identity generato per una tabella o una vista specificata.Returns the last identity value generated for a specified table or view. L'ultimo valore Identity generato può essere per qualsiasi sessione e qualsiasi ambito.The last identity value generated can be for any session and any scope.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax


IDENT_CURRENT( 'table_name' )  

ArgomentiArguments

table_nametable_name
Nome della tabella per la quale viene restituito il valore Identity.Is the name of the table whose identity value is returned. TABLE_NAME è varchar, non prevede alcun valore predefinito.table_name is varchar, with no default.

Tipi restituitiReturn Types

Numeric(38,0)numeric(38,0)

EccezioniExceptions

Restituisce NULL in caso di errore o se un chiamante non dispone dell'autorizzazione necessaria per visualizzare l'oggetto.Returns NULL on error or if a caller does not have permission to view the object.

In SQL ServerSQL Server un utente può visualizzare esclusivamente i metadati delle entità a sicurezza diretta di cui è proprietario o per cui ha ricevuto un'autorizzazione.In SQL ServerSQL Server, a user can only view the metadata of securables that the user owns or on which the user has been granted permission. Di conseguenza, le funzioni predefinite di creazione dei metadati come IDENT_CURRENT possono restituire NULL se l'utente non dispone di alcuna autorizzazione per l'oggetto.This means that metadata-emitting, built-in functions such as IDENT_CURRENT may return NULL if the user does not have any permission on the object. Per altre informazioni, vedere Metadata Visibility Configuration.For more information, see Metadata Visibility Configuration.

OsservazioniRemarks

IDENT_CURRENT è simile al SQL Server 2000SQL Server 2000 identità funzioni SCOPE_IDENTITY e @@IDENTITY.IDENT_CURRENT is similar to the SQL Server 2000SQL Server 2000 identity functions SCOPE_IDENTITY and @@IDENTITY. Queste tre funzioni restituiscono infatti gli ultimi valori Identity generati.All three functions return last-generated identity values. Tuttavia, l'ambito e la sessione in cui ultimo è definito in ognuna di queste funzioni sono diversi:However, the scope and session on which last is defined in each of these functions differ:

  • La funzione IDENT_CURRENT restituisce l'ultimo valore Identity generato per una tabella specifica in qualsiasi sessione e in qualsiasi ambito.IDENT_CURRENT returns the last identity value generated for a specific table in any session and any scope.

  • @@IDENTITY restituisce l'ultimo valore identity generato per qualsiasi tabella nella sessione corrente, in tutti gli ambiti.@@IDENTITY returns the last identity value generated for any table in the current session, across all scopes.

  • La funzione SCOPE_IDENTITY restituisce l'ultimo valore Identity generato per qualsiasi tabella della sessione e dell'ambito correnti.SCOPE_IDENTITY returns the last identity value generated for any table in the current session and the current scope.

    Quando il valore IDENT_CURRENT è NULL, perché la tabella non conteneva righe oppure è stata troncata, la funzione IDENT_CURRENT restituisce il valore di inizializzazione.When the IDENT_CURRENT value is NULL (because the table has never contained rows or has been truncated), the IDENT_CURRENT function returns the seed value.

    Le istruzioni e le transazioni con esito negativo sono in grado di modificare i dati Identity correnti di una tabella e creare gap nei valori della colonna Identity.Failed statements and transactions can change the current identity for a table and create gaps in the identity column values. Non viene mai eseguito il rollback del valore Identity, anche se non si esegue il commit della transazione che ha tentato l'inserimento del valore nella tabella.The identity value is never rolled back even though the transaction that tried to insert the value into the table is not committed. Se, ad esempio, un'istruzione INSERT ha esito negativo a causa di una violazione di IGNORE_DUP_KEY, il valore Identity corrente per la tabella viene comunque incrementato.For example, if an INSERT statement fails because of an IGNORE_DUP_KEY violation, the current identity value for the table is still incremented.

    Prestare attenzione quando si utilizza IDENT_CURRENT per stimare il successivo valore Identity generato.Be cautious about using IDENT_CURRENT to predict the next generated identity value. È possibile che il valore generato effettivo sia diverso dalla somma di IDENT_CURRENT e IDENT_INCR a causa di inserimenti effettuati da altre sessioni.The actual generated value may be different from IDENT_CURRENT plus IDENT_INCR because of insertions performed by other sessions.

EsempiExamples

A.A. Restituzione dell'ultimo valore Identity generato per una tabella specificataReturning the last identity value generated for a specified table

Nell'esempio seguente viene restituito l'ultimo valore Identity generato per la tabella Person.Address nel database AdventureWorks2012.The following example returns the last identity value generated for the Person.Address table in the AdventureWorks2012 database.

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

B.B. Confronto dei valori identity restituiti da IDENT_CURRENT, @@IDENTITY e SCOPE_IDENTITYComparing identity values returned by IDENT_CURRENT, @@IDENTITY and SCOPE_IDENTITY

Nell'esempio seguente vengono illustrati i diversi valori Identity restituiti dalle funzioni IDENT_CURRENT, @@IDENTITY e SCOPE_IDENTITY.The following example shows the different identity values that are returned by IDENT_CURRENT, @@IDENTITY, and SCOPE_IDENTITY.

USE AdventureWorks2012;  
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.*/  

Vedere ancheSee Also

@@IDENTITY (Transact-SQL) @@IDENTITY (Transact-SQL)
SCOPE_IDENTITY (Transact-SQL) SCOPE_IDENTITY (Transact-SQL)
IDENT_INCR ( Transact-SQL ) IDENT_INCR (Transact-SQL)
IDENT_SEED ( Transact-SQL ) IDENT_SEED (Transact-SQL)
Espressioni ( Transact-SQL ) Expressions (Transact-SQL)
Funzioni di sistema ( Transact-SQL )System Functions (Transact-SQL)