Dieser Artikel untersucht die Identitätsfunktion in SQL Server anhand von Beispielen und Unterschieden zwischen diesen Funktionen.
Übersicht der Identitätsspalten
In SQL Server erstellen wir eine Identitätsspalte, um inkrementelle Werte automatisch zu generieren. Es werden Werte basierend auf dem vordefinierten Startwert (Anfangswert) und dem Schrittwert (Inkrement) generiert. Angenommen, wir haben eine Employee-Tabelle und möchten EmployeeID automatisch generieren., Wir haben eine Mitarbeiter-ID 100 und möchten jede neue EmpID um eins erhöhen. In diesem Fall müssen wir die folgenden Werte definieren.
- Seed: 100
- Schritt: 1
Fügen wir einige Datensätze in diese Tabelle ein und zeigen die Datensätze an.
Sie können sehen, dass der erste Mitarbeiter einen ID-Wert 100 erhält und jeder ID-Wert für neue Datensätze ein Inkrement von eins erhält.
Wir haben einige nützliche Identitätsfunktionen in SQL Server, um mit den Identitätsspalten in einer Tabelle zu arbeiten. Lassen Sie uns die folgenden Identitätsfunktionen anhand von Beispielen untersuchen.,
- SQL @@IDENTITY Function
- SQL SCOPE_IDENTITY () Function
- SQL IDENT_CURRENT Function
- SQL IDENTITY Function
SQL @@IDENTITY Function
Wir verwenden die Systemfunktion @@IDENTITY, um den maximal verwendeten IDENTITÄTSWERT in einer Tabelle für die Identitätsspalte unter der aktuellen Sitzung zurückzugeben. Sobald wir eine Zeile in eine Tabelle eingefügt haben, gibt die Funktionsspalte @@IDENTITY den von der Anweisung generierten Identitätswert an. Wenn wir eine Abfrage ausführen, die keine Identitätswerte generiert hat, erhalten wir einen Nullwert in der Ausgabe., Die SQL @@IDENTITY wird unter dem Bereich der aktuellen Sitzung ausgeführt. Wir können es nicht auf einem Remote-oder verknüpften Server verwenden.
Lassen Sie es uns mit dem folgenden Beispiel verstehen.
- Schritt 1: Wir haben einen aktuellen maximalen Identitätswert 110 in der EmployeeData-Tabelle
- Schritt 2: In der aktuellen Sitzung fügen wir einen Datensatz in die EmployeeData-Tabelle ein., Es erhöht den Identitätswert um eins
- Schritt 3: Wir können überprüfen, ob der maximal verwendete Identitätswert 111
- Schritt 4: Wir verwenden die SELECT @@IDENTITY Funktion in der aktuellen Sitzung, um den in dieser Sitzung generierten Identitätswert abzurufen
Fügen wir mehrere Datensätze in diese Tabelle ein und führen die SELECT @@IDENTITY aus.
Wenn wir mehrere Datensätze in eine Sitzung einfügen, gibt SELECT @@Identity den maximalen Identitätswert zurück, der in dieser Sitzung generiert wurde., Im folgenden Beispiel fügen wir drei Datensätze ein, und es werden Identitätswerte um drei vom aktuellen Identitätswert 111 erhöht.
Wenn die Anweisung keine Identitätswerte generiert hat, gibt sie Nullwerte in der Ausgabe zurück.
SQL SCOPE_IDENTITY() Funktion
Wir verwenden die Funktion SCOPE_IDENTITY (), um den letzten Identitätswert in einer Tabelle unter dem aktuellen Bereich zurückzugeben. Ein Bereich kann ein Modul, Trigger, Funktion oder eine gespeicherte Prozedur sein., Wir können die Funktion SCOPE_IDENTITY() ähnlich der Funktion @@IDENTITY betrachten, sie ist jedoch auf einen bestimmten Bereich beschränkt. Es gibt den Nullwert zurück, wenn diese Funktion beteiligt ist, bevor eine insert-Anweisung einen Wert im selben Bereich generiert.
Im folgenden Beispiel sehen wir, dass sowohl @@IDENTITY als auch SCOPE_IDENTITY () denselben Wert in der aktuellen Sitzung und in einem ähnlichen Bereich zurückgeben.
Lassen Sie uns den Unterschied zwischen SCOPE_IDENTITY() und @@IDENTITY mit einem anderen Beispiel verstehen.,
Betrachten wir zwei Tabellen EmployeeData und Departments table. Wir erstellen einen INSERT-Trigger für die EmployeeData-Tabelle. Sobald wir eine Zeile in EmployeeData eingefügt haben, wird ein definierter Trigger zum Einfügen einer Zeile in Abteilungen aufgerufen.
In der folgenden Abfrage erstellen wir einen Trigger zum Einfügen des Standardwerts ‚ IT ‚ in die Abteilungstabelle für jede Einfügung in die EmployeeData-Tabelle.,f7″>
1
2
3
4
5
6
|
CREATE TRIGGER T_INSERT_DEPARTMENT
ON EmployeeData
FOR INSERT AS
BEGIN
INSERT AS VALUES (‚IT‘)
END;
|
Fügen wir den Wert in die Mitarbeiterdatentabelle ein und zeigen die Ausgabe der Funktionen @@IDENTITY und SCOPE_IDENTITY() an.,
In der aktuellen Sitzung haben wir Daten in die EmployeeData-Tabelle eingefügt. Es generiert eine Identität in dieser Tabelle. Der Identity-Seed-Wert ist 1 für die EmployeeData-Tabelle.
Sobald wir einen Wert in die EmployeeData-Tabelle einfügen, wird ein Trigger ausgelöst, um einen Wert in die Abteilungstabelle einzufügen. Der Identity-Seed-Wert ist 100 für die Departments-Tabelle.
- Wir erhalten die Ausgabe 100 für die SELECT @@IDENTITY Funktion
- SCOPE_IDENTITY Funktion gibt nur den Identitätswert im aktuellen Bereich zurück., Es gibt Ausgabe 1 für diese Funktion
SQL IDENT_CURRENT() Funktion
Wir verwenden die Funktion IDENT_CURRENT, um den letzten Identitätswert zurückzugeben, der für eine angegebene Tabelle unter einer Verbindung generiert wurde. Es berücksichtigt nicht den Umfang der SQL-Abfrage, die Identitätswert generiert. Wir müssen die Tabelle angeben, für die wir den Identitätswert überprüfen möchten.
Im folgenden Screenshot können wir sehen, dass wir Daten in die Sitzungs-ID 64 einfügen und den Identitätswert 2 in der EmployeeData-Tabelle generieren.,
Wir können in einem anderen Verbindungsfenster nach dem aktuellen Identitätswert für die EmployeeData-Tabelle suchen und dieselbe Ausgabe wie Identitätswert 2 erhalten.,
1
|
SELECT IDENT_CURRENT(‚EmployeeData‘) AS IdentityValue
|
SQL IDENTITY Function
In my previous article, we explored SQL SELECT INTO Statement, to create a new table and inserted data into it from the existing table., Wir können die SQL IDENTITY-Funktion verwenden, um Identitätswerte in die von SQL SELECT INTO Anweisung erstellte Tabelle einzufügen.
Wenn eine Quelltabelle standardmäßig eine Identitätsspalte enthält,erbt die mit einer SELECT INTO-Anweisung erstellte Tabelle diese. Betrachten Sie ein Szenario, in dem Sie eine Tabelle mit der SELECT INTO-Anweisung aus der Ausgabe einer Ansicht oder Join aus mehreren Tabellen erstellen möchten. In diesem Fall möchten Sie auch eine Identitätsspalte in einer neuen Tabelle erstellen.,
- Hinweis: Die SQL IDENTITY-Funktion unterscheidet sich von der IDENTITY-Eigenschaft, die wir beim Erstellen einer Tabelle verwenden.
Wir müssen einen Datentyp für eine Spalte angeben, um die SQL Identity-Funktion zu verwenden. Wir müssen auch SEED-und Step-Werte angeben, um eine Identitätskonfiguration zu definieren.
Wir können die SQL IDENTITY-Funktion nicht in einer Select-Anweisung verwenden. Wir erhalten die folgende Fehlermeldung.
Msg 177, Ebene 15, Status 1, Zeile 2Der IDENTITÄT Funktion kann nur verwendet werden, wenn die SELECT-Anweisung hat eine INTO-Klausel.,
Erstellen wir eine Tabelle mit der SQL SELECT INTO-Anweisung mit der folgenden Abfrage.
Sobald die Anweisung ausgeführt wird, überprüfen Sie die Tabelleneigenschaften mit dem Befehl sp_help.
1
|
sp_help ‚TEMPTABLE‘
|
Sie können die Identitätsspalte in den TEMPTABLE Eigenschaften gemäß den angegebenen Bedingungen sehen.,
schauen wir uns ein anderes Beispiel. Führen Sie den folgenden Befehl aus.,
1
2
3
4
5
|
SELECT IDENTITY( INT, 100, 2) ALS NEW_ID,
– ID,
Name
IN temp2
AUS dem employeedata;
|
Wir haben bereits die IDENTITY-Spalte in dem EmployeeData-Tabelle. Die neue Tabelle temp2 erbt auch die Identitätsspalte., Wir können nicht mehrere Identitätsspalten in einer Tabelle haben. Aus diesem Grund erhalten wir die folgende Fehlermeldung.
Msg 8108, Ebene 16, Status 1, Zeile 1Cannot add identity-Spalte, mit Hilfe der SELECT INTO-Anweisung, um die Tabelle ‚temp2‘, die bereits in der Spalte ‚ID‘ erbt die identity-Eigenschaft.
Inhaltsangabe
- SQL IDENTITY-Funktionen SCOPE_IDENTITY, IDENT_CURRENT und @@IDENTITY gibt eine ähnliche Ausgabe für eine IDENTITY-Spalten in der aktuellen Sitzung
- SCOPE_IDENTITY gibt Werte, die unter den aktuellen Umfang nur., Wir können den Bereich als Modul, gespeicherte Prozedur, Trigger oder Funktion definieren
- Die Funktion IDENT_CURRENT gibt den Identitätswert für eine angegebene Tabelle in Bezug auf eine Verbindung zurück, die den Wert geändert hat
- Wir können die SQL-Identitätsfunktion verwenden, um die IDENTITÄT in einer Tabelle zu definieren, die mit der SQL SELECT INTO-Anweisung
erstellt wurde. Wir sollten mit den Funktionen vertraut sein, um sie beim Schreiben von T-SQL-Abfragen zu verwenden. Wenn Sie Kommentare oder Fragen haben, können Sie diese in den Kommentaren unten hinterlassen.,
- Author
- Recent Posts
Er ist der Schöpfer einer der größten kostenlosen Online-Sammlungen von Artikeln zu einem einzigen Thema, mit seiner 50-teiligen Serie auf SQL Server Immer auf Verfügbarkeitsgruppen. Aufgrund seines Beitrags zur SQL Server-Community wurde er 2020 und 2021 kontinuierlich mit verschiedenen Preisen ausgezeichnet, darunter mit dem renommierten „Best Author of the year“ bei SQLShack.,
Raj ist immer an neuen Herausforderungen interessiert, wenn Sie also Beratungshilfe zu einem Thema benötigen, das in seinen Schriften behandelt wird, kann er bei Rajendra erreicht werden.gupta16@gmail.,com
Alle Beiträge von Rajendra Gupta anzeigen
- Durchführen von kleineren und größeren Versions – Upgrades für AWS RDS SQL Server – 29.
- Migrieren Ihrer lokalen SQL-Datenbanken mit AWS DMS auf AWS RDS SQL Server – 25. Januar 2021