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

Použijte IDENT_CURRENT() k vrácení aktuální hodnoty identity ve sloupci identity na serveru SQL Server

V SQL Server můžete použít T-SQL IDENT_CURRENT() funkce vrátit poslední hodnotu identity vygenerovanou pro zadanou tabulku nebo pohled ve sloupci identity. Poslední vygenerovaná hodnota identity může být pro jakoukoli relaci a jakýkoli rozsah.

Syntaxe

Syntaxe vypadá takto:

IDENT_CURRENT( 'table_or_view' )

table_or_view argument je název tabulky nebo pohledu, jehož hodnota identity je vrácena.

Příklad 1 – Základní použití

Zde je základní příklad kódu.

SELECT IDENT_CURRENT('Pets') AS Result;

Výsledek:

+----------+
| Result   |
|----------|
| 3        |
+----------+

V tomto případě je aktuální hodnota identity 3.

Zde je další dotaz, který kontroluje více tabulek.

SELECT 
  IDENT_CURRENT('Pets') AS Pets,
  IDENT_CURRENT('BestFriends') AS BestFriends,
  IDENT_CURRENT('Cities') AS Cities;

Výsledek:

+--------+---------------+----------+
| Pets   | BestFriends   | Cities   |
|--------+---------------+----------|
| 3      | 121           | 180      |
+--------+---------------+----------+

Příklad 2 – Včetně schématu

Do argumentu můžete také zahrnout schéma.

SELECT IDENT_CURRENT('dbo.Pets') AS Result;

Výsledek:

+----------+
| Result   |
|----------|
| 3        |
+----------+

Příklad 3 – Po vložení

V tomto příkladu vložím další dva řádky do Pets tabulky a poté vyberte IDENT_CURRENT() znovu.

INSERT INTO Pets (PetName)
VALUES ('Brian'), ('Alf');

SELECT IDENT_CURRENT('dbo.Pets') AS Result;

Výsledek:

+----------+
| Result   |
|----------|
| 5        |
+----------+

Tabulka vypadá takto:

SELECT * FROM Pets;

Výsledek:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 1       | Homer     |
| 2       | Felix     |
| 3       | Ruff      |
| 4       | Brian     |
| 5       | Alf       |
+---------+-----------+

ID zvířete sloupec je sloupec identity. Jeho počáteční hodnota je 1 a jeho přírůstková hodnota je také 1.

Kód použitý k vytvoření této tabulky naleznete v části Jak používat vlastnost IDENTITY() v SQL Server.

Příklad 4 – Kontrola všech tabulek v databázi

Zde je příklad kontroly všech tabulek v databázi na jejich počáteční hodnotu identity.

SELECT 
  TABLE_SCHEMA, 
  TABLE_NAME,   
  IDENT_CURRENT(TABLE_SCHEMA + '.' + TABLE_NAME) AS IDENT_CURRENT  
FROM INFORMATION_SCHEMA.TABLES  
WHERE IDENT_CURRENT(TABLE_SCHEMA + '.' + TABLE_NAME) IS NOT NULL;

Výsledek:

+----------------+----------------+-----------------+
| TABLE_SCHEMA   | TABLE_NAME     | IDENT_CURRENT   |
|----------------+----------------+-----------------|
| dbo            | ConstraintTest | 17              |
| dbo            | Event          | 1               |
| dbo            | Scoreboard     | 8               |
| dbo            | Pets           | 5               |
| dbo            | BestFriends    | 121             |
| dbo            | Cities         | 180             |
| dbo            | Colors         | 6               |
| dbo            | t6             | 1               |
| dbo            | t7             | 100             |
+----------------+----------------+-----------------+

O návratové hodnotě

Vrácená hodnota pro IDENT_CURRENT() je numeric(@@MAXPRECISION,0)) . To znamená, že se jedná o číselný datový typ s pevnou přesností a měřítkem.

Přesnost závisí na serveru. @@MAXPRECISION argument vrací úroveň používanou desítkovými a číselnými datovými typy, jak je aktuálně nastavena na serveru. Přesnost určuje maximální celkový počet desetinných míst (zahrnuje ty na levé a pravé straně desetinné čárky).

Druhý argument určuje měřítko 0 , což znamená, že napravo od desetinného místa nejsou žádné desetinné číslice.

Chcete-li zjistit úroveň přesnosti aktuálně nastavenou na vašem serveru, můžete spustit následující dotaz:

SELECT @@MAX_PRECISION AS [Max Precision];

Zde je výsledek v mém systému:

+-----------------+
| Max Precision   |
|-----------------|
| 38              |
+-----------------+

Vytvoření sloupce identity

Sloupec identity můžete vytvořit pomocí IDENTITY() vlastnost ve vaší CREATE TABLE nebo ALTER TABLE prohlášení.

Dalším způsobem, jak vytvořit sloupec identity, je IDENTITY() funkce. To vám umožní vytvořit sloupec identity při použití SELECT INTO k přenosu dat z jednoho zdroje do druhého.

Rozdíly s @@IDENTITY a SCOPE_IDENTITY()

IDENT_CURRENT() funkce je podobná funkci @@IDENTITY a SCOPE_IDENTITY() , ale existují určité rozdíly.

@@IDENTITY a SCOPE_IDENTITY() vrátit poslední hodnotu identity vygenerovanou v any tabulky v aktuální relaci. Rozdíl mezi těmito dvěma funkcemi je však v tom, že SCOPE_IDENTITY vrátí hodnotu pouze v aktuálním rozsahu, zatímco @@IDENTITY není omezena na konkrétní rozsah.

IDENT_CURRENT() na druhou stranu není omezen rozsahem nebo zasedání. Spíše je omezena na určitou tabulku . Vrací hodnotu identity vygenerovanou pro konkrétní tabulku v jakékoli relaci a libovolném rozsahu.

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. PostgreSQL:mezi datem a časem

  2. Jak nainstalovat Lighttpd s PHP, MariaDB a PhpMyAdmin v Ubuntu

  3. Co je předávání parametrů do SQL a proč to potřebuji?

  4. ORA-06508:PL/SQL:Nelze najít volanou programovou jednotku