2012-05-31 7 views
5

Attualmente, sto cercando di eseguire un update in SQL Server (ma potrebbe essere qualsiasi DML statement che supporti il ​​output clause) e vorrei mettere l'output in una tabella temporanea locale, in questo modo:Come utilizzare la clausola di output in SQL per inserire, aggiornare, eliminare i risultati nella nuova tabella temporanea?

update 
    dbo.MyTable 
set 
    MyField = 30 
output 
    inserted.MyKeyField 
into 
    #myTempTable 
from 
    dbo.MyTable as t 
where 
    f.MyFilteredField = 8 

so che la sintassi è corretta, come per la documentazione per il output clausola (sottolineatura mia):

output_table

Specifies a table that the returned rows are inserted into instead of being returned to the caller. output_table may be a temporary table.

detto questo, mi aspetto che funzioni proprio come farebbe sul l'into clause su un select dichiarazione in quanto sarebbe jus t creare la tabella.

Tuttavia, ottengo il seguente errore:

Invalid object name '#myTempTable'.

Come posso ottenere i risultati del output clausola (inserted o deleted) in una tabella temporanea?

risposta

11

La clausola output non genererà una nuova tabella, in modo da avere a generate the table beforehand which matches the structure of what is specified in the output clause, ad esempio:

select t.MyKeyField into #myTempTable from dbo.MyTable as t where 1 = 0 

Nota, non c'è bisogno di usare la sintassi select into sopra, create table funziona altrettanto bene. Alla fine, è più semplice creare una tabella temporanea vuota che corrisponda ai campi della clausola output.

Una volta creata la tabella, l'errore "Nome oggetto non valido" scomparirà e l'istruzione DML verrà eseguita senza errori (presupponendo che non vi siano altri errori).

+2

È un peccato che questo sia il caso, dal momento che significa scegliere tra la perdita della convenienza del rilevamento del tipo di tabella temporanea o la duplicazione di codice significativa. – bwerks

Problemi correlati