sql >> Databasteknik >  >> RDS >> Sqlserver

Använd IDENT_CURRENT() för att returnera det aktuella identitetsvärdet på en identitetskolumn i SQL Server

I SQL Server kan du använda T-SQL IDENT_CURRENT() funktion för att returnera det senast genererade identitetsvärdet för en angiven tabell eller vy i en identitetskolumn. Det senast genererade identitetsvärdet kan vara för vilken session och vilken omfattning som helst.

Syntax

Syntaxen ser ut så här:

IDENT_CURRENT( 'table_or_view' )

tabell_eller_vy argument är namnet på tabellen eller vyn vars identitetsvärde returneras.

Exempel 1 – Grundläggande användning

Här är ett grundläggande kodexempel.

SELECT IDENT_CURRENT('Pets') AS Result;

Resultat:

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

I det här fallet är det aktuella identitetsvärdet 3.

Här är en annan fråga som kontrollerar fler tabeller.

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

Resultat:

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

Exempel 2 – Inklusive schemat

Du kan också inkludera schemat i argumentet.

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

Resultat:

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

Exempel 3 – Efter en infogning

I det här exemplet infogar jag ytterligare två rader i Husdjur tabell och välj sedan IDENT_CURRENT() igen.

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

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

Resultat:

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

Så här ser tabellen ut:

SELECT * FROM Pets;

Resultat:

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

PetId kolumn är identitetskolumnen. Dess startvärde är 1 och dess inkrementvärde är också 1.

Se hur du använder egenskapen IDENTITY() i SQL Server för koden som används för att skapa den här tabellen.

Exempel 4 – Kontrollera alla tabeller i databasen

Här är ett exempel på hur du kontrollerar alla tabeller i databasen för deras identitetsfrövärde.

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ärdet

Returvärdet för IDENT_CURRENT() är numeric(@@MAXPRECISION,0)) . Det betyder att det är en numerisk datatyp med en fast precision och skala.

Precisionen beror på servern. @@MAXPRECISION argument returnerar nivån som används av decimala och numeriska datatyper som för närvarande är inställda på servern. Precisionen anger det maximala totala antalet decimalsiffror (den inkluderar de till vänster och höger om decimaltecknet).

Det andra argumentet anger en skala på 0 , vilket betyder att det inte finns några decimalsiffror till höger om decimalen.

Du kan köra följande fråga för att hitta den precisionsnivå som för närvarande är inställd på din server:

SELECT @@MAX_PRECISION AS [Max Precision];

Här är resultatet på mitt system:

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

Skapa en identitetskolumn

Du kan skapa en identitetskolumn genom att använda IDENTITY() egenskap i din CREATE TABLE eller ALTER TABLE påstående.

Ett annat sätt att skapa en identitetskolumn är IDENTITY() fungera. Detta gör att du kan skapa en identitetskolumn när du använder en SELECT INTO uttalande för att överföra data från en källa till en annan.

Skillnader med @@IDENTITY och SCOPE_IDENTITY()

IDENT_CURRENT() funktionen liknar @@IDENTITY och SCOPE_IDENTITY() , men det finns vissa skillnader.

@@IDENTITY och SCOPE_IDENTITY() returnera det senast genererade identitetsvärdet i någon tabell i den aktuella sessionen. Men skillnaden mellan dessa två funktioner är att SCOPE_IDENTITY returnerar värdet endast inom det aktuella omfånget, medan @@IDENTITY är inte begränsad till ett specifikt omfång.

IDENT_CURRENT() å andra sidan, är inte begränsad av omfattning eller session. Snarare är den begränsad till en specificerad tabell . Den returnerar det identitetsvärde som genererats för en specifik tabell i valfri session och vilket omfattning som helst.

Se IDENT_CURRENT vs @@IDENTITY vs SCOPE_IDENTITY i SQL Server:Vad är skillnaden? för ett enkelt exempel som går igenom skillnaderna mellan dessa tre funktioner.


  1. Hur man aktiverar/inaktiverar dataåtkomst i SQL Server (T-SQL-exempel)

  2. Få skillnaden mellan två datum både i månader och dagar i sql

  3. MySQL IN tillståndsgräns

  4. Hur man aktiverar Change Data Capture (CDC) på hela tabellen ELLER aktiverar CDC på bordet med lista över kolumner i SQL Server