Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Database SQL di
AzureIstanza gestita di SQL di
AzureDatabase SQL in Microsoft Fabric
La IDENT_CURRENT funzione di sistema restituisce l'ultimo valore identità generato per una tabella o vista specificata. L'ultimo valore Identity generato può essere per qualsiasi sessione e qualsiasi ambito.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
IDENT_CURRENT( 'table_or_view' )
Argomenti
table_or_view
Il nome della tabella o della vista il cui valore identità viene restituito. table_or_view è di tipo varchar e non prevede alcun valore predefinito.
Tipi restituiti
numeric(@@MAXPRECISION,0))
Eccezioni
Restituisce NULL in caso di errore o se un chiamante non dispone dell'autorizzazione per visualizzare l'oggetto.
In SQL Server un utente può visualizzare esclusivamente i metadati delle entità a sicurezza diretta di cui è proprietario o per cui ha ricevuto un'autorizzazione. Ciò significa che funzioni integrate che emettono metadati, come , IDENT_CURRENT possono tornare NULL se l'utente non ha alcun permesso sull'oggetto. Per altre informazioni, vedere Metadata Visibility Configuration.
Osservazioni:
IDENT_CURRENTè simile alle funzioni SCOPE_IDENTITY identità di SQL Server 2000 (8.x) e @@IDENTITY. Queste tre funzioni restituiscono infatti gli ultimi valori Identity generati. Tuttavia, l'ambito e la sessione in cui ultimo è definito in ciascuna di queste funzioni differiscono:
-
IDENT_CURRENTrestituisce l'ultimo valore identità generato per una tabella specifica in qualsiasi sessione e in qualsiasi ambito. -
@@IDENTITYrestituisce l'ultimo valore identità generato per qualsiasi tabella nella sessione corrente, su tutti gli ambiti. -
SCOPE_IDENTITYrestituisce l'ultimo valore identità generato per qualsiasi tabella nella sessione corrente e l'ambito corrente.
Quando il IDENT_CURRENT valore è NULL (poiché la tabella non ha mai contenuto righe o è stata troncata), la IDENT_CURRENT funzione restituisce il valore iniziale.
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. 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. Ad esempio, se un'istruzione INSERT ha esito negativo a causa di una IGNORE_DUP_KEY violazione, il valore Identity corrente per la tabella viene comunque incrementato.
Quando si usa IDENT_CURRENT su una vista che contiene joins, NULL viene restituito. a prescindere dal fatto che una o più delle tabelle unite in join abbiano una colonna Identity.
Importante
Usa cautela quando usi IDENT_CURRENT per prevedere il prossimo valore di identità generato. Il valore effettivamente generato può essere diverso da IDENT_CURRENT plus IDENT_INCR a causa delle inserzioni effettuate da altre sessioni.
La IDENT_CURRENT funzione non è disponibile per le colonne identità in Fabric Data Warehouse.
Esempi
R. Restituisci l'ultimo valore identità generato per una tabella specificata
Nell'esempio seguente viene restituito l'ultimo valore Identity generato per la tabella Person.Address nel database AdventureWorks2025.
USE AdventureWorks2022;
GO
SELECT IDENT_CURRENT ('Person.Address') AS Current_Identity;
GO
B. Confronta i valori di identità restituiti da IDENT_CURRENT, @@IDENTITY e SCOPE_IDENTITY
Nell'esempio seguente vengono illustrati i diversi valori Identity restituiti dalle funzioni IDENT_CURRENT, @@IDENTITY e 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.*/