In SQL Server puoi utilizzare il @@IDENTITY
T-SQL funzione di sistema per restituire l'ultimo valore di identità inserito nella sessione corrente.
Nota che restituisce l'ultimo valore di identità generato in qualsiasi tabella nella sessione corrente . Questo è in contrasto con IDENT_CURRENT()
funzione, che restituisce l'ultimo valore di identità inserito per una determinata tabella .
Il SCOPE_IDENTITY()
la funzione è molto simile a @@IDENTITY
in quanto restituisce anche l'ultimo valore di identità inserito nella sessione corrente. La differenza è che SCOPE_IDENTITY()
è limitato all'ambito attuale.
Esempio 1
Ecco un esempio di codice di base di @@IDENTITY
utilizzo.
SELECT @@IDENTITY AS [Last-Inserted Identity Value];
Risultato:
+--------------------------------+ | Last-Inserted Identity Value | |--------------------------------| | NULL | +--------------------------------+
Il motivo per cui restituisce NULL
è perché ho aperto una nuova sessione su SQL Server e non ho ancora aggiornato una colonna di identità durante la mia sessione corrente.
Di seguito è riportato del codice che esegue alcuni aggiornamenti della colonna di identità.
CREATE TABLE Cats(id int IDENTITY); CREATE TABLE Dogs(id int IDENTITY); INSERT Cats DEFAULT VALUES; INSERT Cats DEFAULT VALUES; SELECT @@IDENTITY AS [Last-Inserted Identity Value];
Risultato:
+--------------------------------+ | Last-Inserted Identity Value | |--------------------------------| | 2 | +--------------------------------+
Qui creo un paio di tabelle, inserisco alcuni dati, quindi seleziono il valore di identità corrente.
Il valore di identità corrente è 2 perché ho inserito due righe in quella tabella.
Ora inseriamo una riga nell'altra tabella:
INSERT Dogs DEFAULT VALUES; SELECT @@IDENTITY AS [Last-Inserted Identity Value];
Risultato:
+--------------------------------+ | Last-Inserted Identity Value | |--------------------------------| | 1 | +--------------------------------+
Il valore restituito è 1, perché è l'ultimo valore di identità inserito per questa sessione.
Esempio 2 – Rispetto a IDENT_CURRENT()
Qui viene confrontato con IDENT_CURRENT()
.
SELECT @@IDENTITY AS [@@IDENTITY], IDENT_CURRENT('Cats') AS [IDENT_CURRENT('Cats')], IDENT_CURRENT('Dogs') AS [IDENT_CURRENT('Dogs')];
Risultato:
+--------------+-------------------------+-------------------------+ | @@IDENTITY | IDENT_CURRENT('Cats') | IDENT_CURRENT('Dogs') | |--------------+-------------------------+-------------------------| | 1 | 2 | 1 | +--------------+-------------------------+-------------------------+
Come accennato, IDENT_CURRENT()
restituisce il risultato in base alla tabella specificata. Pertanto possiamo usarlo per trovare gli ultimi valori di identità per ogni tabella.
Esempio 3:passaggio a una nuova sessione
Ora se apro una nuova connessione e seleziono @@IDENTITY
di nuovo, ecco cosa succede:
USE Test; SELECT @@IDENTITY AS [@@IDENTITY], IDENT_CURRENT('Cats') AS [IDENT_CURRENT('Cats')], IDENT_CURRENT('Dogs') AS [IDENT_CURRENT('Dogs')];
Risultato:
+--------------+-------------------------+-------------------------+ | @@IDENTITY | IDENT_CURRENT('Cats') | IDENT_CURRENT('Dogs') | |--------------+-------------------------+-------------------------| | NULL | 2 | 1 | +--------------+-------------------------+-------------------------+
Il @@IDENTITY
il risultato è NULL perché non ho inserito nulla in una colonna di identità nella nuova sessione.
Il IDENT_CURRENT()
i risultati non sono NULL, perché il suo risultato è basato sulla tabella, non sulla sessione.
@@IDENTITY vs SCOPE_IDENTITY() vs IDENT_CURRENT()
Vedi IDENT_CURRENT vs @@IDENTITY vs SCOPE_IDENTITY in SQL Server:qual è la differenza? per un semplice esempio che illustra le differenze tra queste tre funzioni.