Frage:
Der neu erzeugte Wert einer Identity-Spalte soll ermittelt werden.
Lösung:
Dafür gibt es drei Vorgehensweisen, die kleine aber feine Unterschiede haben:
SELECT @@Identity liefert den letzten Identity-Wert eines Gültigkeitsbereichs
Beispiel:
Ein Insert in eine Tabelle ergibt den Identity-Wert 7. Durch den Insert wird ein Trigger aktiviert, der in einer anderen Tabelle ebenfalls einen Datensatz anlegt. Dort ergibt der Insert den Identity-Wert 20. In diesem Fall ist die Rückgabe per SELECT @@Identity gleich 20.
SELECT Current_Id FROM tabelle liefert den letzten Identity-Wert der angegebenen Tabelle.
Beispiel:
Benutzer A speichert einen neuen Datensatz und erzeugt dabei den Identity-Wert 8. Benutzer B speichert in der Zwischenzeit ebenfalls einen neuen Datensatz und erzeugt dabei den Identity-Wert 9. Beide Benutzer erhalten mit SELECT Current_Id FROM tabelle den Wert 9.
SELECT Scope_Identity liefert den letzten Identity-Wert des aktuellen Gültigkeitsbereichs.
Beispiel:
Benutzer A speichert per Gespeicherter Prozedur einen neuen Datensatz. Der neue Identity-Wert ist 8. Benutzer B speichert auch einen neuen Datensatz, der den Identity-Wert 9 ergibt. Mit SELECT Scope_Identity erhält Benutzer A den Wert 8, Benutzer B den Wert 9.