Wenn ich eine Einfügeanweisung habe wie:
INSERT INTO MyTable
(
Name,
Address,
PhoneNo
)
VALUES
(
'Yatrix',
'1234 Address Stuff',
'1112223333'
)
Wie setze ich @var INT
den Identitätswert der neuen Zeile (aufgerufen Id
) mithilfe der OUTPUT-Klausel? Ich habe Beispiele gesehen, wie INSERTED.Name zum Beispiel in Tabellenvariablen eingefügt wurde, aber ich kann es nicht in eine Nicht-Tabellenvariable bringen.
Ich habe versucht OUPUT INSERTED.Id AS @var
, SET @var = INSERTED.Id
aber weder gearbeitet haben.
sql
sql-server-2005
insert
Yatrix
quelle
quelle
OUTPUT
Klausel direkt zugewiesen werden kann .OUTPUT
Klausel schreibt in eine Tabelle. Es kann eine Tabellenvariable, eine temporäre Tabelle, .... sein.Antworten:
Sie können die neu eingefügte ID entweder wie folgt an die SSMS-Konsole ausgeben lassen:
Sie können dies auch von z. B. C # aus verwenden, wenn Sie die ID zurück zu Ihrer aufrufenden App benötigen - führen Sie einfach die SQL-Abfrage mit
.ExecuteScalar()
(anstelle von aus.ExecuteNonQuery()
) aus, um das resultierendeID
zurückzulesen.Oder wenn Sie das neu eingefügte
ID
in T-SQL erfassen müssen (z. B. für die spätere weitere Verarbeitung), müssen Sie eine Tabellenvariable erstellen:Auf diese Weise können Sie mehrere Werte eingeben
@OutputTbl
und diese weiter verarbeiten. Sie können hier auch eine "normale" temporäre Tabelle (#temp
) oder sogar eine "echte" persistente Tabelle als "Ausgabeziel" verwenden.quelle
real persistent table
- dies ist äußerst fantastisch, da Sie gleichzeitigINSERT
Informationen inTWO
Tabellen einfügen können .SCOPE_IDENTITY()
funktioniert dafür besser.