Heim >Datenbank >MySQL-Tutorial >Was ist der Unterschied zwischen „@@IDENTITY', „SCOPE_IDENTITY()', „IDENT_CURRENT()' und „IDENTITY()' in SQL Server?

Was ist der Unterschied zwischen „@@IDENTITY', „SCOPE_IDENTITY()', „IDENT_CURRENT()' und „IDENTITY()' in SQL Server?

Linda Hamilton
Linda HamiltonOriginal
2025-01-20 13:04:11833Durchsuche

What's the Difference Between `@@IDENTITY`, `SCOPE_IDENTITY()`, `IDENT_CURRENT()`, and `IDENTITY()` in SQL Server?

SQL Server-Identitätsfunktionen: Ein detaillierter Vergleich

@@IDENTITY, SCOPE_IDENTITY(), IDENT_CURRENT() und IDENTITY() beziehen sich alle auf das Abrufen von Werten aus Identitätsspalten in SQL Server, unterscheiden sich jedoch erheblich in Umfang und Anwendung.

Grundlegendes zum Umfang in SQL Server-Identitätsfunktionen

„Bereich“ bezieht sich auf den Kontext, in dem der Identitätswert generiert wird. Dies kann sein:

  • Sitzungsumfang: Die aktuelle Datenbankverbindung.
  • Umfang der Abfrage/gespeicherten Prozedur: Der aktuelle Ausführungsblock einer Abfrage oder gespeicherten Prozedur.

Funktionsaufschlüsselung

  • @@IDENTITY: Gibt den letzten Identitätswert zurück, der in der aktuellen Sitzung generiert wurde, unabhängig vom Bereich (Abfrage, gespeicherte Prozedur oder Trigger).

  • SCOPE_IDENTITY(): Gibt den letzten Identitätswert zurück, der innerhalb der aktuellen Sitzung und des aktuellen Bereichs generiert wurde. Dies ist die am häufigsten empfohlene Funktion, da sie präzisere Ergebnisse liefert.

  • IDENT_CURRENT('table_name'): Gibt den letzten Identitätswert zurück, der für eine spezifische Tabelle generiert wurde, unabhängig von der Sitzung oder dem Bereich. Dies ist nützlich, wenn Sie den letzten Identitätswert für eine bestimmte Tabelle über verschiedene Sitzungen oder Kontexte hinweg benötigen.

  • IDENTITY(): Dies wird nicht zum Abrufen von Identitätswerten verwendet. Es handelt sich um ein Schlüsselwort, das zum Definieren einer Identitätsspalte beim Erstellen einer Tabelle mit der SELECT ... INTO-Syntax verwendet wird.

Anschauliche Szenarien

Lassen Sie uns verschiedene Szenarien untersuchen, um die Unterschiede hervorzuheben:

  • Einzelne INSERT-Anweisung: Wenn eine einzelne INSERT-Anweisung eine Zeile hinzufügt, geben SCOPE_IDENTITY() und @@IDENTITY denselben Wert zurück.

  • Triggerbasiertes Einfügen: Wenn ein Trigger nach einem INSERT in die erste Tabelle eine Zeile in eine zweite Tabelle einfügt, gibt SCOPE_IDENTITY() die Identität aus der Tabelle zurück, die direkt von der aktuellen Anweisung betroffen ist (die erste Tabelle), während @@IDENTITY die Identität der zuletzt in der Sitzung betroffenen Tabelle zurückgibt (die möglicherweise die zweite Tabelle ist).

Die richtige Funktion wählen

In den meisten Fällen wird SCOPE_IDENTITY() bevorzugt, da es kontextspezifische Ergebnisse liefert. @@IDENTITY ist hilfreich, wenn Sie den aktuellsten Identitätswert benötigen, unabhängig von seiner Herkunft innerhalb der Sitzung. IDENT_CURRENT() ist entscheidend, wenn Sie unabhängig von der aktuellen Sitzung den letzten Identitätswert für eine bestimmte Tabelle benötigen. Denken Sie daran, dass IDENTITY() zum Definieren von Identitätsspalten dient und nicht zum Abrufen ihrer Werte.

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied 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!

Stellungnahme:
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