Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come si utilizza la clausola OUTPUT di un'istruzione INSERT per ottenere il valore di identità?

Puoi fare in modo che l'ID appena inserito venga inviato alla console SSMS in questo modo:

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

Puoi usarlo anche da ad es. C#, quando devi riportare l'ID all'app chiamante:esegui semplicemente la query SQL con .ExecuteScalar() (invece di .ExecuteNonQuery() ) per leggere l'ID risultante indietro.

O se hai bisogno di acquisire il ID appena inserito all'interno di T-SQL (ad es. per ulteriori elaborazioni successive), è necessario creare una variabile di tabella:

DECLARE @OutputTbl TABLE (ID INT)

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

In questo modo, puoi inserire più valori in @OutputTbl ed eseguire ulteriori elaborazioni su quelli. Puoi anche utilizzare una tabella temporanea "normale" (#temp ) o anche una tabella persistente "reale" come "destinazione di output" qui.