sql >> Database >  >> RDS >> Sqlserver

Gebruik @@IDENTITY om de laatst ingevoerde identiteitswaarde in SQL Server te retourneren

In SQL Server kunt u de T-SQL @@IDENTITY . gebruiken systeemfunctie om de laatst ingevoerde identiteitswaarde in de huidige sessie te retourneren.

Merk op dat het de laatste identiteitswaarde retourneert die is gegenereerd in elke tafel in de huidige sessie . Dit in tegenstelling tot de IDENT_CURRENT() functie, die de laatst ingevoerde identiteitswaarde retourneert voor een bepaalde tabel .

De SCOPE_IDENTITY() functie lijkt erg op @@IDENTITY in die zin dat het ook de laatst ingevoerde identiteitswaarde in de huidige sessie retourneert. Het verschil is dat SCOPE_IDENTITY() is beperkt tot het huidige bereik.

Voorbeeld 1

Hier is een eenvoudig codevoorbeeld van @@IDENTITY gebruik.

SELECT @@IDENTITY AS [Last-Inserted Identity Value];

Resultaat:

+--------------------------------+
| Last-Inserted Identity Value   |
|--------------------------------|
| NULL                           |
+--------------------------------+

De reden waarom dit NULL retourneert is omdat ik een nieuwe sessie voor SQL Server heb geopend en ik nog geen identiteitskolom heb bijgewerkt tijdens mijn huidige sessie.

Hieronder vindt u een code die enkele identiteitskolomupdates uitvoert.

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];

Resultaat:

+--------------------------------+
| Last-Inserted Identity Value   |
|--------------------------------|
| 2                              |
+--------------------------------+

Hier maak ik een aantal tabellen, voeg wat gegevens in en selecteer vervolgens de huidige identiteitswaarde.

De huidige identiteitswaarde is 2 omdat ik twee rijen in die tabel heb ingevoegd.

Laten we nu een rij invoegen in de andere tabel:

INSERT Dogs DEFAULT VALUES;
SELECT @@IDENTITY AS [Last-Inserted Identity Value];

Resultaat:

+--------------------------------+
| Last-Inserted Identity Value   |
|--------------------------------|
| 1                              |
+--------------------------------+

De geretourneerde waarde is 1, want dat is de laatst ingevoerde identiteitswaarde voor deze sessie.

Voorbeeld 2 – Vergeleken met IDENT_CURRENT()

Hier wordt het vergeleken met IDENT_CURRENT() .

SELECT 
  @@IDENTITY AS [@@IDENTITY],
  IDENT_CURRENT('Cats') AS [IDENT_CURRENT('Cats')],
  IDENT_CURRENT('Dogs') AS [IDENT_CURRENT('Dogs')];

Resultaat:

+--------------+-------------------------+-------------------------+
| @@IDENTITY   | IDENT_CURRENT('Cats')   | IDENT_CURRENT('Dogs')   |
|--------------+-------------------------+-------------------------|
| 1            | 2                       | 1                       |
+--------------+-------------------------+-------------------------+

Zoals vermeld, IDENT_CURRENT() geeft het resultaat terug op basis van de opgegeven tabel. Daarom kunnen we het gebruiken om de laatste identiteitswaarden voor elke tabel te vinden.

Voorbeeld 3 – Overschakelen naar een nieuwe sessie

Als ik nu een nieuwe verbinding open en @@IDENTITY selecteer, nogmaals, dit is wat er gebeurt:

USE Test;
SELECT 
  @@IDENTITY AS [@@IDENTITY],
  IDENT_CURRENT('Cats') AS [IDENT_CURRENT('Cats')],
  IDENT_CURRENT('Dogs') AS [IDENT_CURRENT('Dogs')];

Resultaat:

+--------------+-------------------------+-------------------------+
| @@IDENTITY   | IDENT_CURRENT('Cats')   | IDENT_CURRENT('Dogs')   |
|--------------+-------------------------+-------------------------|
| NULL         | 2                       | 1                       |
+--------------+-------------------------+-------------------------+

De @@IDENTITY het resultaat is NULL omdat ik niets heb ingevoegd in een identiteitskolom in de nieuwe sessie.

De IDENT_CURRENT() resultaten zijn niet NULL, omdat het resultaat is gebaseerd op de tabel - niet op de sessie.

@@IDENTITY vs SCOPE_IDENTITY() vs IDENT_CURRENT()

Zie IDENT_CURRENT vs @@IDENTITY vs SCOPE_IDENTITY in SQL Server:wat is het verschil? voor een eenvoudig voorbeeld dat de verschillen tussen deze drie functies doorloopt.


  1. Een tekenreeks converteren naar kleine letters in SQL

  2. Hoe SQL Server 2017 &2019 gelijktijdig op een Mac te draaien

  3. Wat is SQL-injectie?

  4. SQLAlchemy, Psycopg2 en Postgresql KOPIE