Se ho una dichiarazione di inserimento come:
INSERT INTO MyTable ( Name, Address, PhoneNo ) VALUES ( 'Yatrix', '1234 Address Stuff', '1112223333' )
Come posso impostare @var INT
sul valore dell’id quadro della nuova riga (chiamato Id
) utilizzando la clausola OUTPUT? Ho visto esempi di inserimento di INSERTED.Name in variabili di tabella, ad esempio, ma non riesco a inserirlo in una variabile non di tabella.
Ho provato OUPUT INSERTED.Id AS @var
, SET @var = INSERTED.Id
, ma nessuno dei due ha funzionato.
Puoi avere l’ID appena inserito in uscita nella console SSMS in questo modo:
INSERT INTO MyTable(Name, Address, PhoneNo) OUTPUT INSERTED.ID VALUES ('Yatrix', '1234 Address Stuff', '1112223333')
È ansible utilizzare questo anche da C #, quando è necessario recuperare l’ID all’app chiamante – basta eseguire la query SQL con .ExecuteScalar()
(anziché .ExecuteNonQuery()
) per leggere l’ ID
risultante.
Oppure, se è necessario acquisire l’ ID
appena inserito in T-SQL (ad esempio per un’ulteriore elaborazione successiva), è 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 questi. Puoi anche utilizzare una tabella temporanea “normale” ( #temp
) o anche una tabella persistente “reale” come “destinazione di output” qui.