Wie kann ich wieder ein neues IDENTITY-Spalte-Wert aus einer SQLServer-SELECT-Anweisung?
Ich bin das einfügen in eine SQL Server-Tabelle mit einer autoincrementing Schlüsselfeld. (Ich glaube dies nennt man eine IDENTITY-Spalte in SQL Server.)
In Oracle kann ich mit der RÜCKSENDUNG Stichwort zu geben, meine INSERT-Anweisung eine Ergebnismenge, wie eine SELECT-Abfrage, die zurückkehren wird der generierte Wert:
INSERT INTO table
(foreign_key1, value)
VALUES
(9, 'text')
RETURNING key_field INTO :var;
Wie kann ich dies in SQL Server?
Bonus: Okay, schöne Antworten bisher, aber wie bringe ich es in eine einzelne Anweisung, wenn möglich? 🙂
Hinzugefügt "one call" - Beispiel.
InformationsquelleAutor skiphoppy | 2009-06-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Allgemeinen, es nicht getan werden kann in einer einzigen Anweisung.
Aber die SELECT SCOPE_IDENTITY() kann (und sollte) direkt nach der INSERT-Anweisung, so ist es alles in der gleichen Datenbank aufrufen.
Beispiel:
OUTPUT kann, aber es hat einige Einschränkungen, die Sie beachten sollten:
http://msdn.microsoft.com/en-us/library/ms177564.aspx
Es canbe gemacht in eine Anweisung in SQL Server 2005 mit der AUSGABE
InformationsquelleAutor richardtallent
Edit: Mit einem spielen...
Wenn nur die AUSGABE - Klausel unterstützt lokale Variablen.
Sowieso, um eine Reihe von IDs anstatt eines singleton
Edit 2: In einem Aufruf. Ich habe nie Gelegenheit gehabt, zu verwenden, dieses Konstrukt.
hhmm einem anonymen downvote für diese Antwort...
InformationsquelleAutor gbn
Zusätzlich zu @@IDENTITY, sollten Sie auch einen Blick in SCOPE_IDENTITY() und IDENT_CURRENT(). Sie wahrscheinlich wollen, SCOPE_IDENTITY(). @@IDENTITY hat das problem, dass er zurückkehren könnte eine Identität Wertschöpfung in einem trigger auf die eigentliche Tabelle, die Sie versuchen zu verfolgen.
Auch, sind diese single-value-Funktionen. Ich weiß nicht, wie die Oracle-RÜCKKEHR-Schlüsselwort funktioniert.
InformationsquelleAutor Tom H
SCOPE_IDENTITY
InformationsquelleAutor Ken Burkhardt
Es ist abhängig vom aufrufenden Kontext.
Wenn Sie diese aufrufen vom client-code, können Sie die AUSGABE und Lesen Sie dann den Wert, der zurückgegeben wird.
Ergebnis:
Wenn Sie wickeln diese in eine stored procedure mit OUTPUT ist mehr Arbeit. Dort werden Sie verwenden möchten SCOPE_IDENTITY(), aber man kann es nicht in einer einzigen Anweisung. Sicher, man kann mehrere statements auf einer einzelnen Zeile mit ';' als Trennzeichen, aber das ist nicht eine einzelne Anweisung.
Ergebnis: @idValue-variable enthält den identity-Wert. Verwenden Sie ein OUTPUT-parameter geben den Wert zurück.
InformationsquelleAutor Rob Garrison
Können Sie AUSGABE IN, die die zusätzlichen Vorteile des seins in der Lage zu erfassen, mehrere Identitäten eingefügt.
InformationsquelleAutor Cade Roux
INSERT INTO Tabelle(foreign_key1, Wert)VALUES(9, 'text');SELECT @@IDENTITY;
InformationsquelleAutor Bhaskar