sql >> Databáze >  >> RDS >> Sqlserver

Použijte @@ IDENTITY k vrácení poslední vložené hodnoty identity na serveru SQL Server

V SQL Server můžete použít T-SQL @@IDENTITY systémovou funkci, která vrátí naposledy vloženou hodnotu identity v aktuální relaci.

Všimněte si, že vrací poslední hodnotu identity vygenerovanou v any tabulky v aktuální relaci . To je v kontrastu s IDENT_CURRENT() funkce, která vrací naposledy vloženou hodnotu identity pro danou tabulku .

SCOPE_IDENTITY() funkce je velmi podobná funkci @@IDENTITY v tom, že také vrátí naposledy vloženou hodnotu identity v aktuální relaci. Rozdíl je v tom, že SCOPE_IDENTITY() je omezena na aktuální rozsah.

Příklad 1

Zde je základní příklad kódu @@IDENTITY použití.

VYBERTE @@IDENTITY JAKO [naposledy vložená hodnota identity];

Výsledek:

+--------------------------------+| Naposledy vložená hodnota identity ||--------------------------------|| NULL |+--------------------------------+

Důvod, proč to vrací NULL je to proto, že jsem otevřel novou relaci na SQL Server a během aktuální relace jsem ještě neaktualizoval sloupec identity.

Níže je uveden kód, který provádí některé aktualizace sloupců identity.

CREATE TABLE Cats(id int IDENTITY);CREATE TABLE Psi(id int IDENTITY);INSERT Cats DEFAULT VALUES;INSERT Cats DEFAULT VALUES;SELECT @@IDENTITY AS [Last-Inserted Identity Value];

Výsledek:

+--------------------------------+| Naposledy vložená hodnota identity ||--------------------------------|| 2 |+--------------------------------+

Zde vytvořím několik tabulek, vložím nějaká data a poté vyberu aktuální hodnotu identity.

Aktuální hodnota identity je 2, protože jsem do této tabulky vložil dva řádky.

Nyní vložíme jeden řádek do druhé tabulky:

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

Výsledek:

+--------------------------------+| Naposledy vložená hodnota identity ||--------------------------------|| 1 |+--------------------------------+

Vrácená hodnota je 1, protože to je poslední vložená hodnota identity pro tuto relaci.

Příklad 2 – ve srovnání s IDENT_CURRENT()

Zde je to porovnáno s IDENT_CURRENT() .

VYBERTE @@IDENTITY JAKO [@@IDENTITY], IDENT_CURRENT('Kočky') JAKO [IDENT_CURRENT('Kočky')], IDENT_CURRENT('Psi') JAKO [IDENT_CURRENT('Psi')];

Výsledek:

+--------------+-------------------------+----- ---------------------+| @@IDENTITY | IDENT_CURRENT('Kočky') | IDENT_CURRENT('Psi') ||--------------+-------------------------+- -------------------------|| 1 | 2 | 1 |+--------------+-------------------------+------ -------------------+

Jak již bylo zmíněno, IDENT_CURRENT() vrátí výsledek na základě zadané tabulky. Můžeme jej tedy použít k nalezení posledních hodnot identity pro každou tabulku.

Příklad 3 – Přepnutí na novou relaci

Nyní, když otevřu nové připojení a vyberu @@IDENTITY znovu se stane toto:

POUŽÍVEJTE test; VYBERTE @@IDENTITY JAKO [@@IDENTITY], IDENT_CURRENT('Kočky') JAKO [IDENT_CURRENT('Kočky')], IDENT_CURRENT('Psi') JAKO [IDENT_CURRENT('Psi')]; 

Výsledek:

+--------------+-------------------------+----- ---------------------+| @@IDENTITY | IDENT_CURRENT('Kočky') | IDENT_CURRENT('Psi') ||--------------+-------------------------+- -------------------------|| NULL | 2 | 1 |+--------------+-------------------------+------ -------------------+

@@IDENTITY výsledek je NULL, protože jsem do sloupce identity v nové relaci nic nevložil.

IDENT_CURRENT() výsledky nejsou NULL, protože jejich výsledek je založen na tabulce – nikoli na relaci.

@@IDENTITY vs. SCOPE_IDENTITY() vs IDENT_CURRENT()

Viz IDENT_CURRENT vs @@IDENTITY vs SCOPE_IDENTITY v SQL Server:Jaký je rozdíl? pro jednoduchý příklad, který projde rozdíly mezi těmito třemi funkcemi.


  1. Mysql počítá instance podřetězce a poté seřaďte podle

  2. Jak odstranit z výběru v MySQL?

  3. Jak připojit programy C++ k MariaDB

  4. Jak zajistit, aby MySQL správně zvládalo UTF-8