Heim > Datenbank > MySQL-Tutorial > Was sind die Unterschiede zwischen „@@IDENTITY', „SCOPE_IDENTITY()', „IDENT_CURRENT()' und „IDENTITY()' in SQL Server?

Was sind die Unterschiede zwischen „@@IDENTITY', „SCOPE_IDENTITY()', „IDENT_CURRENT()' und „IDENTITY()' in SQL Server?

Linda Hamilton
Freigeben: 2025-01-20 12:42:11
Original
499 Leute haben es durchsucht

What are the Differences Between `@@IDENTITY`, `SCOPE_IDENTITY()`, `IDENT_CURRENT()`, and `IDENTITY()` in SQL Server?

Umfassendes Verständnis der Funktionen @@IDENTITY, SCOPE_IDENTITY(), IDENT_CURRENT() und IDENTITY() in SQL Server

Bei der SQL-Datenbankprogrammierung ist das Abrufen des zuletzt eingefügten Identitätswerts eine wichtige Aufgabe. Zu diesem Zweck stehen verschiedene Funktionen mit jeweils eigenen Nuancen zur Verfügung. SCOPE_IDENTITY(), IDENTITY(), @@IDENTITY und IDENT_CURRENT() sind einige der am häufigsten verwendeten Funktionen, aber die Unterschiede zwischen ihnen können verwirrend sein.

Umfang verstehen

Das Verständnis des Konzepts des „Umfangs“ ist der Schlüssel zum Verständnis der Unterschiede zwischen diesen Funktionen. In SQL bezieht sich der Bereich auf die Ebene, auf der eine Abfrage oder ein Codeblock ausgeführt wird. Es gibt zwei Hauptbereiche:

  • Sitzungsumfang: Der Kontext einer einzelnen Datenbankverbindung.
  • Abfragebereich: Der Kontext einer einzelnen Abfrage oder gespeicherten Prozedur.

Funktionsunterschied

Basierend auf Umfang und Funktion finden Sie hier die Aufschlüsselung der einzelnen Funktionen:

  • @@IDENTITY: Gibt den letzten Identitätswert zurück, der in derselben Sitzung erstellt wurde. Diese Funktion hängt nicht vom Umfang der Abfrage oder gespeicherten Prozedur ab und wird normalerweise zum Abrufen globaler Identitätswerte verwendet.
  • SCOPE_IDENTITY(): Gibt den letzten Identitätswert zurück, der innerhalb derselben Sitzung und desselben Bereichs erstellt wurde. Im Gegensatz zu @@IDENTITY berücksichtigt diese Funktion nur den Kontext der aktuellen Abfrage oder gespeicherten Prozedur.
  • IDENT_CURRENT(name): Gibt den letzten Identitätswert zurück, der für eine bestimmte Tabelle oder Ansicht erstellt wurde, unabhängig vom Sitzungs- oder Abfragebereich. Mit dieser Funktion können Identitätswerte über verschiedene Abfragen und Sitzungen hinweg abgerufen werden.
  • IDENTITY(): Im Gegensatz zu den anderen drei Funktionen wird IDENTITY() hauptsächlich zum Generieren von Identitätswerten in SELECT...INTO-Abfragen verwendet. Vorhandene Identitätswerte werden nicht abgerufen.

Nutzungsszenarien

Um diese Unterschiede zu veranschaulichen, betrachten Sie das folgende Szenario:

  • Beispiel 1: Fügen Sie einen Datensatz mit einer Identitätsspalte ein und rufen Sie ihn mit @@IDENTITY ab.
<code class="language-sql">INSERT INTO MyTable (Name) OUTPUT INSERTED.ID INTO @Identity;
PRINT @Identity;  -- 打印全局插入的标识值</code>
Nach dem Login kopieren
  • Beispiel 2: Erstellen Sie einen Trigger auf MyTable, um einen Datensatz in eine andere Tabelle einzufügen und den Identitätswert aus beiden Tabellen abzurufen.
<code class="language-sql">CREATE TRIGGER MyTrigger ON MyTable AFTER INSERT AS
INSERT INTO OtherTable (Name) VALUES (NEW.Name);

INSERT INTO MyTable (Name) VALUES ('Test');

SELECT @@identity AS MyIdentity;  -- 打印在MyTable中插入的标识值
SELECT scope_identity() AS TriggerIdentity;  -- 打印触发器在OtherTable中插入的标识值</code>
Nach dem Login kopieren

In diesen Szenarien verhalten sich @@IDENTITY und SCOPE_IDENTITY() aufgrund der Beteiligung des Auslösers unterschiedlich.

Best-Practice-Vorschläge

In den meisten Fällen ist SCOPE_IDENTITY() die empfohlene Funktion zum Abrufen des zuletzt erstellten Identitätswerts. Es stellt die zuverlässigsten und kontextabhängigsten Werte innerhalb der aktuellen Abfrage oder gespeicherten Prozedur bereit. Wenn Sie jedoch einen Identitätswert in einem anderen Bereich oder einer anderen Sitzung abrufen müssen, bietet IDENT_CURRENT(name) diese Funktionalität.

Das obige ist der detaillierte Inhalt vonWas sind die Unterschiede zwischen „@@IDENTITY', „SCOPE_IDENTITY()', „IDENT_CURRENT()' und „IDENTITY()' in SQL Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage