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

Brug IDENT_CURRENT() til at returnere den aktuelle identitetsværdi på en identitetskolonne i SQL Server

I SQL Server kan du bruge T-SQL IDENT_CURRENT() funktion til at returnere den sidst genererede identitetsværdi for en specificeret tabel eller visning på en identitetskolonne. Den sidst genererede identitetsværdi kan være for enhver session og ethvert omfang.

Syntaks

Syntaksen ser sådan ud:

IDENT_CURRENT( 'table_or_view' )

table_or_view argument er navnet på tabellen eller visningen, hvis identitetsværdi returneres.

Eksempel 1 – Grundlæggende brug

Her er et grundlæggende kodeeksempel.

SELECT IDENT_CURRENT('Pets') AS Result;

Resultat:

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

I dette tilfælde er den aktuelle identitetsværdi 3.

Her er en anden forespørgsel, der kontrollerer flere tabeller.

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

Resultat:

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

Eksempel 2 – Inklusive skemaet

Du kan også inkludere skemaet i argumentet.

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

Resultat:

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

Eksempel 3 – Efter en indsættelse

I dette eksempel indsætter jeg yderligere to rækker i Kæledyr tabel, og vælg derefter IDENT_CURRENT() igen.

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

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

Resultat:

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

Sådan ser tabellen ud:

SELECT * FROM Pets;

Resultat:

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

PetId kolonne er identitetskolonnen. Dens startværdi er 1, og dens stigningsværdi er også 1.

Se Sådan bruges IDENTITY()-egenskaben i SQL Server for koden, der bruges til at oprette denne tabel.

Eksempel 4 – Tjek alle tabeller i databasen

Her er et eksempel på kontrol af alle tabeller i databasen for deres identitetsfrøværdi.

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;

Resultat:

+----------------+----------------+-----------------+
| 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             |
+----------------+----------------+-----------------+

Om returværdien

Returværdien for IDENT_CURRENT() er numeric(@@MAXPRECISION,0)) . Det betyder, at det er en numerisk datatype med en fast præcision og skala.

Præcisionen afhænger af serveren. @@MAXPRECISION argument returnerer det niveau, der bruges af decimal- og numeriske datatyper, som aktuelt er indstillet på serveren. Præcisionen angiver det maksimale samlede antal decimalcifre (det inkluderer dem på venstre og højre side af decimaltegnet).

Det andet argument angiver en skala på 0 , hvilket betyder, at der ikke er nogen decimaler til højre for decimalen.

Du kan køre følgende forespørgsel for at finde det præcisionsniveau, der aktuelt er indstillet på din server:

SELECT @@MAX_PRECISION AS [Max Precision];

Her er resultatet på mit system:

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

Oprettelse af en identitetskolonne

Du kan oprette en identitetskolonne ved at bruge IDENTITY() ejendom i din CREATE TABLE eller ALTER TABLE udmelding.

En anden måde at oprette en identitetskolonne på er IDENTITY() fungere. Dette giver dig mulighed for at oprette en identitetskolonne, når du bruger en SELECT INTO sætning til at overføre data fra en kilde til en anden.

Forskelle med @@IDENTITY og SCOPE_IDENTITY()

IDENT_CURRENT() funktion ligner @@IDENTITY og SCOPE_IDENTITY() , men der er nogle forskelle.

@@IDENTITY og SCOPE_IDENTITY() returnere den sidst genererede identitetsværdi i enhver tabel i den aktuelle session. Forskellen mellem disse to funktioner er dog, at SCOPE_IDENTITY returnerer kun værdien inden for det aktuelle omfang, hvorimod @@IDENTITY er ikke begrænset til et specifikt omfang.

IDENT_CURRENT() på den anden side er ikke begrænset af omfang eller session. Det er snarere begrænset til en specificeret tabel . Det returnerer den identitetsværdi, der er genereret for en specifik tabel i enhver session og ethvert omfang.

Se IDENT_CURRENT vs @@IDENTITY vs SCOPE_IDENTITY i SQL Server:Hvad er forskellen? for et simpelt eksempel, der gennemgår forskellene mellem disse tre funktioner.


  1. Hvordan indstiller jeg et SQL Server-scripts timeout inde fra scriptet?

  2. Er rækkefølgen i en underforespørgsel garanteret bevaret?

  3. Hvordan man kombinerer resultater af to forespørgsler i et enkelt datasæt

  4. Forbedre SQL Server-forespørgselsydeevne på store tabeller