Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Użyj @@IDENTITY, aby zwrócić ostatnio wstawioną wartość tożsamości w programie SQL Server

W SQL Server możesz użyć T-SQL @@IDENTITY funkcja systemowa zwracająca ostatnio wprowadzoną wartość tożsamości w bieżącej sesji.

Zwróć uwagę, że zwraca ostatnią wartość tożsamości wygenerowaną w any tabela w bieżącej sesji . Jest to w przeciwieństwie do IDENT_CURRENT() funkcja, która zwraca ostatnio wstawioną wartość tożsamości dla danej tabeli .

SCOPE_IDENTITY() funkcja jest bardzo podobna do @@IDENTITY w tym, że zwraca również ostatnio wstawioną wartość tożsamości w bieżącej sesji. Różnica polega na tym, że SCOPE_IDENTITY() jest ograniczony do aktualnego zakresu.

Przykład 1

Oto podstawowy przykład kodu @@IDENTITY wykorzystanie.

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

Wynik:

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

Powód, dla którego zwraca NULL to dlatego, że otworzyłem nową sesję na serwerze SQL Server i nie zaktualizowałem jeszcze kolumny tożsamości podczas bieżącej sesji.

Poniżej znajduje się kod, który dokonuje aktualizacji niektórych kolumn tożsamości.

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

Wynik:

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

Tutaj tworzę kilka tabel, wstawiam trochę danych, a następnie wybieram bieżącą wartość tożsamości.

Obecna wartość tożsamości to 2, ponieważ wstawiłem dwa wiersze do tej tabeli.

Teraz wstawmy jeden wiersz do drugiej tabeli:

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

Wynik:

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

Zwrócona wartość to 1, ponieważ jest to ostatnia wstawiona wartość tożsamości w tej sesji.

Przykład 2 – w porównaniu z IDENT_CURRENT()

Tutaj jest porównywany z IDENT_CURRENT() .

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

Wynik:

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

Jak wspomniano, IDENT_CURRENT() zwraca swój wynik na podstawie określonej tabeli. Dlatego możemy go użyć do znalezienia ostatnich wartości tożsamości dla każdej tabeli.

Przykład 3 – Przełącz na nową sesję

Teraz, jeśli otworzę nowe połączenie i wybiorę @@IDENTITY znowu dzieje się tak:

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

Wynik:

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

@@IDENTITY wynik ma wartość NULL, ponieważ nie wstawiłem niczego do kolumny tożsamości w nowej sesji.

IDENT_CURRENT() wyniki nie są NULL, ponieważ ich wynik jest oparty na tabeli, a nie na sesji.

@@IDENTITY vs SCOPE_IDENTITY() vs IDENT_CURRENT()

Zobacz IDENT_CURRENT vs @@IDENTITY vs SCOPE_IDENTITY w programie SQL Server:jaka jest różnica? dla prostego przykładu, który omawia różnice między tymi trzema funkcjami.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Typy kursorów programu SQL Server — co to są kursory statyczne w programie SQL Server | Samouczek SQL Server / Samouczek TSQL

  2. Co oznacza =*?

  3. Podziel wartości na wiele wierszy

  4. Wstaw zbiorczy z kwalifikatorem tekstu w SQL Server

  5. Jak utworzyć listę rozdzielaną przecinkami za pomocą zapytania SQL?