426 Stimmen

SQL Server - Rückgabewert nach INSERT

Ich versuche, einen Schlüsselwert nach einer INSERT-Anweisung zurückzubekommen. Beispiel: Ich habe eine Tabelle mit den Attributen name und id. id ist ein generierter Wert.

    INSERT INTO table (name) VALUES('bob');

Jetzt möchte ich die ID im selben Schritt zurückerhalten. Wie wird das gemacht?

Wir verwenden Microsoft SQL Server 2008.

11voto

AngelaG Punkte 541

@@IDENTITY Ist eine Systemfunktion, die den zuletzt eingefügten Identitätswert zurückgibt.

10voto

Ishrar Punkte 85

Es gibt mehrere Möglichkeiten, die zuletzt eingefügte ID nach dem Einfügebefehl zu ermitteln.

  1. @@IDENTITY : Gibt den letzten Identitätswert zurück, der auf einer Verbindung in der aktuellen Sitzung erzeugt wurde, unabhängig von der Tabelle und dem Bereich der Anweisung, die den Wert erzeugt hat.
  2. SCOPE_IDENTITY() : Sie gibt den letzten Identitätswert zurück, der durch die Einfügeanweisung im aktuellen Bereich in der aktuellen Verbindung erzeugt wurde, unabhängig von der Tabelle.
  3. IDENT_CURRENT(‘TABLENAME’) : Sie gibt den letzten Identitätswert zurück, der für die angegebene Tabelle erzeugt wurde, unabhängig von Verbindung, Sitzung oder Bereich. IDENT_CURRENT ist nicht durch den Bereich und die Sitzung begrenzt; es ist auf eine bestimmte Tabelle begrenzt.

Jetzt scheint es schwieriger zu sein, zu entscheiden, welche genau meinen Anforderungen entspricht.

Ich bevorzuge meist SCOPE_IDENTITY().

Wenn Sie select SCOPE_IDENTITY() zusammen mit TableName in der Insert-Anweisung verwenden, erhalten Sie genau das Ergebnis, das Sie erwartet haben.

Quelle: CodoBee

6voto

MNF Punkte 659

Die beste und sicherste Lösung ist die Verwendung von SCOPE_IDENTITY() .

Sie müssen nur die Bereichsidentität nach jedem Einfügen abrufen und in einer Variablen speichern, da Sie zwei Einfügungen im selben Bereich aufrufen können.

ident_current et @@identity sie funktionieren zwar, sind aber nicht sicher. Sie können Probleme in einer großen Anwendung haben

  declare @duplicataId int
  select @duplicataId =   (SELECT SCOPE_IDENTITY())

Weitere Einzelheiten finden Sie hier Microsoft-Dokumente

4voto

Purplegoldfish Punkte 5118

Sie können verwenden scope_identity() um die ID der Zeile, die Sie gerade in eine Variable eingefügt haben, auszuwählen, dann wählen Sie einfach die gewünschten Spalten aus dieser Tabelle aus, wobei die id = die Identität ist, die Sie von scope_identity()

Hier finden Sie die MSDN-Informationen http://msdn.microsoft.com/en-us/library/ms190315.aspx

4voto

Es wird empfohlen, SCOPE_IDENTITY() zu verwenden, um den neuen ID-Wert zu erhalten, aber NICHT Verwendung von "OUTPUT Inserted.ID"

Wenn die Einfügeanweisung eine Ausnahme auslöst, wird sie direkt ausgelöst. Aber "OUTPUT Inserted.ID" wird 0 zurückgeben, was vielleicht nicht wie erwartet ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X