wake-up-neo.net

Wie verwende ich die OUTPUT-Klausel einer INSERT-Anweisung, um den Identitätswert abzurufen?

Wenn ich eine Einfügeanweisung habe wie:

INSERT INTO MyTable
(  
  Name,
  Address,
  PhoneNo
)
VALUES
(
  'Yatrix',
   '1234 Address Stuff',
   '1112223333'
)

Wie setze ich @var INT mit der OUTPUT-Klausel auf den Identitätswert der neuen Zeile (genannt Id)? Ich habe Beispiele dafür gesehen, wie INSERTED.Name in Tabellenvariablen eingefügt wurde, aber ich kann es nicht in eine Nicht-Tabellenvariable einfügen.

Ich habe es versucht OUPUT INSERTED.Id AS @var, SET @var = INSERTED.Id, aber keiner hat funktioniert.

216
Yatrix

Sie können die neu eingefügte ID wie folgt an die SSMS-Konsole ausgeben lassen:

INSERT INTO MyTable(Name, Address, PhoneNo)
OUTPUT INSERTED.ID
VALUES ('Yatrix', '1234 Address Stuff', '1112223333')

Sie können dies auch von z.B. C #, wenn Sie die ID zurück zu Ihrer aufrufenden App erhalten müssen - führen Sie einfach die SQL-Abfrage mit .ExecuteScalar() (anstelle von .ExecuteNonQuery()) aus, um das resultierende ID zurückzulesen .

Oder wenn Sie das neu eingefügte ID in T-SQL erfassen müssen (z. B. zur späteren Weiterverarbeitung), müssen Sie eine Tabellenvariable erstellen:

DECLARE @OutputTbl TABLE (ID INT)

INSERT INTO MyTable(Name, Address, PhoneNo)
OUTPUT INSERTED.ID INTO @OutputTbl(ID)
VALUES ('Yatrix', '1234 Address Stuff', '1112223333')

Auf diese Weise können Sie mehrere Werte in @OutputTbl Eingeben und diese weiterverarbeiten. Sie könnten hier auch eine "normale" temporäre Tabelle (#temp) Oder sogar eine "echte" persistente Tabelle als "Ausgabeziel" verwenden.

422
marc_s