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.