Come utilizzo una clausola OUTPUT dell’istruzione INSERT per ottenere il valore dell’identity framework?

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.