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
@@IDENTITY è una funzione di sistema che restituisce l'ultimo valore identità inserito.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
@@IDENTITY
Tipi restituiti
numeric(38,0)
Osservazioni:
Dopo che una INSERTistruzione , SELECT INTO, o copia in blocco è completata, @@IDENTITY contiene l'ultimo valore identità generato dall'istruzione.
- Se l'istruzione non ha influenzato nessuna tabella con colonne identità,
@@IDENTITYrestituisceNULL. - Se vengono inserite più righe, generando più valori identità,
@@IDENTITYrestituisce l'ultimo valore identità generato. - Se l'istruzione attiva uno o più trigger che esegueno inserti che generano valori identità, chiamare
@@IDENTITYimmediatamente dopo l'istruzione restituisce l'ultimo valore identità generato dai trigger. - Se un trigger viene attivato dopo un'azione di inserimento su una tabella che ha una colonna identità, e il trigger viene inserito in un'altra tabella che non ha colonna identità,
@@IDENTITYrestituisce il valore identità del primo inserimento. Il@@IDENTITYvalore non torna a un'impostazione precedente se l'istruzione oSELECT INTOlaINSERTcopia in blocco falliscono, o se la transazione viene annullata.
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 una istruzione INSERT fallisce a causa di una IGNORE_DUP_KEY violazione, il valore identitario corrente della tabella viene comunque incrementato.
@@IDENTITY, SCOPE_IDENTITY, e IDENT_CURRENT sono funzioni simili perché restituiscono tutte l'ultimo valore inserito nella IDENTITY colonna di una tabella.
@@IDENTITYeSCOPE_IDENTITYrestituire l'ultimo valore identità generato in qualsiasi tabella della sessione corrente. Tuttavia,SCOPE_IDENTITYrestituisce il valore solo all'interno dell'ambito corrente;@@IDENTITYnon è limitato a uno specifico ambito.IDENT_CURRENTnon è limitato dall'ambito e dalla sessione; è limitato a una tabella specificata.IDENT_CURRENTrestituisce il valore identità generato per una tabella specifica in qualsiasi sessione e in qualsiasi ambito. Per altre informazioni, vedere IDENT_CURRENT (Transact-SQL).
L'ambito della @@IDENTITY funzione è la sessione corrente sul server locale su cui viene eseguita. Questa funzione non può essere applicata a server remoti o collegati. Per ottenere un valore Identity in un server diverso, eseguire una stored procedure nel contesto di un server remoto o collegato specifico in modo che recuperi il valore Identity e lo restituisca alla connessione chiamante nel server locale.
La replicazione può influenzare il @@IDENTITY valore, poiché viene utilizzata all'interno dei trigger di replicazione e delle procedure memorizzate.
@@IDENTITY non è un indicatore affidabile dell'identità creata dall'utente più recente se la colonna fa parte di un articolo di replicazione. Puoi usare la SCOPE_IDENTITY() sintassi delle funzioni invece di @@IDENTITY. Per altre informazioni, vedere SCOPE_IDENTITY (Transact-SQL)
Nota
La stored procedure chiamante o l'istruzione Transact-SQL deve essere riscritta in modo che usi la funzione SCOPE_IDENTITY(). Verrà così restituito l'ultimo valore Identity usato nell'ambito dell'istruzione utente e non il valore Identity nell'ambito del trigger annidato usato dalla replica.
Esempi
Nell'esempio seguente viene inserita una riga in una tabella contenente una colonna Identity (LocationID) e viene utilizzata la funzione @@IDENTITY per visualizzare il valore Identity nella nuova riga.
USE AdventureWorks2022;
GO
--Display the value of LocationID in the last row in the table.
SELECT MAX(LocationID) FROM Production.Location;
GO
INSERT INTO Production.Location (Name, CostRate, Availability, ModifiedDate)
VALUES ('Damaged Goods', 5, 2.5, GETDATE());
GO
SELECT @@IDENTITY AS 'Identity';
GO
--Display the value of LocationID of the newly inserted row.
SELECT MAX(LocationID) FROM Production.Location;
GO