sql >> Database >  >> RDS >> Sqlserver

Gebruik IDENT_CURRENT() om de huidige identiteitswaarde op een identiteitskolom in SQL Server te retourneren

In SQL Server kunt u de T-SQL IDENT_CURRENT() . gebruiken functie om de laatste identiteitswaarde te retourneren die is gegenereerd voor een opgegeven tabel of weergave op een identiteitskolom. De laatst gegenereerde identiteitswaarde kan voor elke sessie en elk bereik zijn.

Syntaxis

De syntaxis gaat als volgt:

IDENT_CURRENT( 'table_or_view' )

De table_or_view argument is de naam van de tabel of weergave waarvan de identiteitswaarde wordt geretourneerd.

Voorbeeld 1 – Basisgebruik

Hier is een eenvoudig codevoorbeeld.

SELECT IDENT_CURRENT('Pets') AS Result;

Resultaat:

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

In dit geval is de huidige identiteitswaarde 3.

Hier is nog een query die meer tabellen controleert.

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

Resultaat:

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

Voorbeeld 2 – inclusief het schema

Je kunt het schema ook in het argument opnemen.

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

Resultaat:

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

Voorbeeld 3 – Na een invoeging

In dit voorbeeld voeg ik nog twee rijen in de Huisdieren tabel en selecteer vervolgens IDENT_CURRENT() nogmaals.

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

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

Resultaat:

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

Zo ziet de tabel eruit:

SELECT * FROM Pets;

Resultaat:

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

De PetId kolom is de identiteitskolom. De beginwaarde is 1, en de incrementwaarde is ook 1.

Zie Hoe de IDENTITY()-eigenschap in SQL Server te gebruiken voor de code die is gebruikt om deze tabel te maken.

Voorbeeld 4 – Controleer alle tabellen in de database

Hier is een voorbeeld van het controleren van alle tabellen in de database op hun identiteits-seedwaarde.

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;

Resultaat:

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

Over de retourwaarde

De retourwaarde voor IDENT_CURRENT() is numeric(@@MAXPRECISION,0)) . Dit betekent dat het een numeriek gegevenstype is met een vaste precisie en schaal.

De precisie is afhankelijk van de server. De @@MAXPRECISION argument retourneert het niveau dat wordt gebruikt door decimale en numerieke gegevenstypen zoals momenteel ingesteld op de server. De precisie specificeert het maximale totale aantal cijfers achter de komma (inclusief die aan de linker- en rechterkant van de komma).

Het tweede argument specificeert een schaal van 0 , wat betekent dat er geen decimale cijfers rechts van de decimale plaats staan.

U kunt de volgende query uitvoeren om het precisieniveau te vinden dat momenteel op uw server is ingesteld:

SELECT @@MAX_PRECISION AS [Max Precision];

Dit is het resultaat op mijn systeem:

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

Een identiteitskolom maken

U kunt een identiteitskolom maken met behulp van de IDENTITY() eigenschap in uw CREATE TABLE of ALTER TABLE uitspraak.

Een andere manier om een ​​identiteitskolom aan te maken is de IDENTITY() functie. Hiermee kunt u een identiteitskolom maken bij gebruik van een SELECT INTO statement om gegevens van de ene bron naar de andere over te dragen.

Verschillen met @@IDENTITY en SCOPE_IDENTITY()

De IDENT_CURRENT() functie is vergelijkbaar met @@IDENTITY en SCOPE_IDENTITY() , maar er zijn enkele verschillen.

@@IDENTITY en SCOPE_IDENTITY() retourneer de laatste identiteitswaarde die is gegenereerd in elke tafel in de huidige sessie. Het verschil tussen deze twee functies is echter dat SCOPE_IDENTITY retourneert de waarde alleen binnen het huidige bereik, terwijl @@IDENTITY is niet beperkt tot een specifiek bereik.

IDENT_CURRENT() aan de andere kant, wordt niet beperkt door het bereik of sessie. Het is eerder beperkt tot een gespecificeerde tabel . Het retourneert de identiteitswaarde die is gegenereerd voor een specifieke tabel in elke sessie en elk bereik.

Zie IDENT_CURRENT vs @@IDENTITY vs SCOPE_IDENTITY in SQL Server:wat is het verschil? voor een eenvoudig voorbeeld dat de verschillen tussen deze drie functies doorloopt.


  1. Verschillende manieren om SQL Server AlwaysOn-beschikbaarheidsgroepen te bewaken

  2. Predicaatvolgorde is belangrijk in uitgebreide evenementen

  3. Gegevensvisualisatie met Apache Zeppelin - Zelfstudie

  4. Hoe u uw PostgreSQL-versie kunt controleren