Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server - Beste Möglichkeit, die Identität der eingefügten Zeile zu ermitteln?

  • @@IDENTITY gibt den letzten Identitätswert zurück, der für eine beliebige Tabelle in der aktuellen Sitzung über alle Bereiche hinweg generiert wurde. Hier müssen Sie vorsichtig sein , da es bereichsübergreifend ist. Sie könnten statt Ihrer aktuellen Anweisung einen Wert von einem Trigger erhalten.

  • SCOPE_IDENTITY() gibt den letzten Identitätswert zurück, der für eine beliebige Tabelle in der aktuellen Sitzung und im aktuellen Bereich generiert wurde. Im Allgemeinen, was Sie verwenden möchten .

  • IDENT_CURRENT('tableName') gibt den letzten Identitätswert zurück, der für eine bestimmte Tabelle in einer beliebigen Sitzung und einem beliebigen Bereich generiert wurde. Auf diese Weise können Sie angeben, aus welcher Tabelle Sie den Wert haben möchten, falls die beiden obigen nicht ganz das sind, was Sie brauchen (sehr selten ). Außerdem, wie @Guy Starbuck erwähnte:„Sie könnten dies verwenden, wenn Sie den aktuellen IDENTITY-Wert für eine Tabelle abrufen möchten, in die Sie keinen Datensatz eingefügt haben.“

  • Die OUTPUT -Klausel von INSERT -Anweisung können Sie auf jede Zeile zugreifen, die über diese Anweisung eingefügt wurde. Da es auf die spezifische Anweisung beschränkt ist, ist es einfacher als die anderen Funktionen oben. Es ist jedoch etwas ausführlicher (Sie müssen in eine Tabellenvariable/Temp-Tabelle einfügen und diese dann abfragen) und es gibt Ergebnisse selbst in einem Fehlerszenario, in dem die Anweisung zurückgesetzt wird. Wenn Ihre Abfrage jedoch einen parallelen Ausführungsplan verwendet, ist dies die einzig garantierte Methode zum Abrufen der Identität (kurz zum Ausschalten der Parallelität). Es wird jedoch vorher ausgeführt Trigger und kann nicht verwendet werden, um vom Trigger generierte Werte zurückzugeben.