Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verwenden Sie IDENT_CURRENT(), um den aktuellen Identitätswert in einer Identitätsspalte in SQL Server zurückzugeben

In SQL Server können Sie T-SQL IDENT_CURRENT() verwenden -Funktion, um den letzten Identitätswert zurückzugeben, der für eine angegebene Tabelle oder Ansicht in einer Identitätsspalte generiert wurde. Der letzte generierte Identitätswert kann für jede Sitzung und jeden Bereich gelten.

Syntax

Die Syntax lautet wie folgt:

IDENT_CURRENT( 'table_or_view' )

Die table_or_view Argument ist der Name der Tabelle oder Ansicht, deren Identitätswert zurückgegeben wird.

Beispiel 1 – Grundlegende Verwendung

Hier ist ein einfaches Codebeispiel.

SELECT IDENT_CURRENT('Pets') AS Result;

Ergebnis:

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

In diesem Fall ist der aktuelle Identitätswert 3.

Hier ist eine weitere Abfrage, die weitere Tabellen prüft.

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

Ergebnis:

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

Beispiel 2 – Einbinden des Schemas

Sie können das Schema auch in das Argument einbeziehen.

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

Ergebnis:

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

Beispiel 3 – Nach einer Einfügung

In diesem Beispiel füge ich zwei weitere Zeilen in die Haustiere ein Tabelle, und wählen Sie dann IDENT_CURRENT() aus nochmal.

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

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

Ergebnis:

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

So sieht die Tabelle aus:

SELECT * FROM Pets;

Ergebnis:

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

Die Haustier-ID Spalte ist die Identitätsspalte. Sein Startwert ist 1 und sein Inkrementwert ist ebenfalls 1.

Unter So verwenden Sie die IDENTITY()-Eigenschaft in SQL Server finden Sie den Code, der zum Erstellen dieser Tabelle verwendet wird.

Beispiel 4 – Alle Tabellen in der Datenbank prüfen

Hier ist ein Beispiel für die Überprüfung aller Tabellen in der Datenbank auf ihren Identitäts-Seed-Wert.

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;

Ergebnis:

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

Über den Rückgabewert

Der Rückgabewert für IDENT_CURRENT() ist numeric(@@MAXPRECISION,0)) . Dies bedeutet, dass es sich um einen numerischen Datentyp mit fester Genauigkeit und Skalierung handelt.

Die Genauigkeit hängt vom Server ab. Der @@MAXPRECISION Das Argument gibt die Ebene zurück, die von dezimalen und numerischen Datentypen verwendet wird, wie sie derzeit im Server festgelegt sind. Die Genauigkeit gibt die maximale Gesamtzahl der Dezimalstellen an (sie schließt die auf der linken und rechten Seite des Dezimalkommas ein).

Das zweite Argument gibt eine Skalierung von 0 an , was bedeutet, dass rechts von der Dezimalstelle keine Dezimalstellen stehen.

Sie können die folgende Abfrage ausführen, um die derzeit auf Ihrem Server festgelegte Genauigkeitsstufe zu ermitteln:

SELECT @@MAX_PRECISION AS [Max Precision];

Hier ist das Ergebnis auf meinem System:

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

Erstellen einer Identitätsspalte

Sie können eine Identitätsspalte erstellen, indem Sie IDENTITY() verwenden -Eigenschaft in Ihrem CREATE TABLE oder ALTER TABLE Erklärung.

Eine andere Möglichkeit, eine Identitätsspalte zu erstellen, ist IDENTITY() Funktion. Dadurch können Sie eine Identitätsspalte erstellen, wenn Sie ein SELECT INTO verwenden Anweisung zum Übertragen von Daten von einer Quelle zu einer anderen.

Unterschiede mit @@IDENTITY und SCOPE_IDENTITY()

Der IDENT_CURRENT() Die Funktion ähnelt @@IDENTITY und SCOPE_IDENTITY() , aber es gibt einige Unterschiede.

@@IDENTITY und SCOPE_IDENTITY() gibt den letzten in beliebigen generierten Identitätswert zurück Tabelle in der aktuellen Sitzung. Der Unterschied zwischen diesen beiden Funktionen besteht jedoch darin, dass SCOPE_IDENTITY gibt den Wert nur innerhalb des aktuellen Bereichs zurück, wohingegen @@IDENTITY ist nicht auf einen bestimmten Geltungsbereich beschränkt.

IDENT_CURRENT() andererseits ist nicht durch den Bereich oder beschränkt Sitzung. Vielmehr ist es auf eine bestimmte Tabelle beschränkt . Es gibt den Identitätswert zurück, der für eine bestimmte Tabelle in jeder Sitzung und jedem Bereich generiert wurde.

Siehe IDENT_CURRENT vs. @@IDENTITY vs. SCOPE_IDENTITY in SQL Server:Was ist der Unterschied? für ein einfaches Beispiel, das die Unterschiede zwischen diesen drei Funktionen durchläuft.