Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Utilizzare @@IDENTITY per restituire l'ultimo valore di identità inserito in SQL Server

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.