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:
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:
@@IDENTITY
ab. <code class="language-sql">INSERT INTO MyTable (Name) OUTPUT INSERTED.ID INTO @Identity; PRINT @Identity; -- 打印全局插入的标识值</code>
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>
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!