Verstehen, wie man die IDENTITY einer eingefügten Zeile in SQL abruft

Wenn Sie mit SQL Server arbeiten und den IDENTITY-Wert einer eingefügten Zeile abrufen müssen, stehen Ihnen mehrere Optionen zur Verfügung. Jede Methode hat ihre eigenen Implikationen und Anwendungsfälle. In diesem Beitrag werden wir die gebräuchlichsten Möglichkeiten untersuchen, die IDENTITY einer eingefügten Zeile zu erhalten, und erläutern, wann jede Methode verwendet werden sollte.

Die Herausforderung, den IDENTITY-Wert abzurufen

Wenn Sie einen neuen Datensatz in eine Datenbanktabelle einfügen, die eine Identitätsspalte hat, generiert SQL Server automatisch einen eindeutigen Wert für diese Spalte. Möglicherweise benötigen Sie jedoch diesen generierten Wert direkt nach der Durchführung der Einfügeoperation. Dies kann aus verschiedenen Gründen entscheidend sein, wie z.B. Protokollierung, weitere Verarbeitung oder das Herstellen von Beziehungen zu anderen Tabellen.

Verfügbare Methoden zum Abrufen von IDENTITY-Werten

  1. Verwendung von @@IDENTITY

    • Beschreibung: Gibt den letzten Identitätswert zurück, der für irgendeine Tabelle in der aktuellen Sitzung und über alle Bereiche hinweg generiert wurde.
    • Vorsicht: Da es Werte aus allen Bereichen abruft, einschließlich der von Triggern generierten, kann es leicht zu einer unerwarteten Wertabrufung kommen.
    • Anwendungsfall: Im Allgemeinen nicht empfohlen aufgrund möglicher Verwirrung.

    Erfahren Sie mehr über @@IDENTITY

  2. Verwendung von SCOPE_IDENTITY()

    • Beschreibung: Gibt den letzten Identitätswert zurück, der für irgendeine Tabelle in der aktuellen Sitzung und innerhalb des aktuellen Bereichs generiert wurde.
    • Empfehlung: Dies ist im Allgemeinen die sicherste und verlässlichste Methode zum Abrufen eines Identitätswerts.
    • Anwendungsfall: Ideal für die meisten Standardoperationen.

    Erfahren Sie mehr über SCOPE_IDENTITY()

  3. Verwendung von IDENT_CURRENT('tableName')

    • Beschreibung: Gibt den letzten Identitätswert zurück, der für eine bestimmte Tabelle generiert wurde, unabhängig von der Sitzung oder dem Bereich.
    • Hinweis: Verwenden Sie diese Methode, wenn es entscheidend ist, die Tabelle anzugeben, obwohl dies eine seltene Anforderung ist.
    • Anwendungsfall: Nützlich, wenn Sie Werte aus Tabellen abrufen müssen, die von Ihrer Sitzung nicht zuletzt geändert wurden.

    Erfahren Sie mehr über IDENT_CURRENT()

  4. Verwendung der OUTPUT-Klausel

    • Beschreibung: Ermöglicht den Zugriff auf jede Zeile, die durch diese spezifische INSERT-Anweisung eingefügt wurde, einschließlich ihrer generierten Identitätswerte.
    • Vorteile: Einfacher als die vorherigen Methoden. Gewährleistet Genauigkeit, selbst im Falle von Fehlern nach der Einfügung.
    • Nachteile: Etwas umfangreicher, da Sie die Ergebnisse in eine Tabellenvariable oder eine temporäre Tabelle einfügen müssen.
    • Besondere Notiz: Wenn Ihre Abfrage parallele Ausführungspläne umfasst, ist dies die einzige garantierte Methode, um den Identitätswert abzurufen.

    Erfahren Sie mehr über die OUTPUT-Klausel

Fazit

Jede Methode zum Abrufen des IDENTITY-Wertes hat ihre Stärken und Schwächen. Hier ist eine schnelle Zusammenfassung, um Ihnen bei der Entscheidung zu helfen:

  • Verwenden Sie @@IDENTITY, wenn Sie mit möglichen Mehrdeutigkeiten und Verwirrungen einverstanden sind.
  • Bevorzugen Sie SCOPE_IDENTITY() für die meisten normalen Umstände, um Genauigkeit zu gewährleisten.
  • Wählen Sie IDENT_CURRENT(), wenn Sie Informationen aus einer bestimmten Tabelle benötigen.
  • Implementieren Sie die OUTPUT-Klausel, wenn Sie mehrere Werte aus Ihrer Einfügeoperation benötigen, insbesondere in komplexen Abfragen oder während der Fehlerbehandlung.

Letzte Gedanken

Durch das Verständnis dieser Methoden können Sie Identitätswerte in SQL Server effektiv verwalten und abrufen, wodurch die Integrität und Zuverlässigkeit Ihrer Datenbankoperationen verbessert wird.