2013-07-17 16 views
6

È necessario inserire i dati da un'istruzione select in una tabella temporanea utilizzando il comando execute.Inserimento in una tabella temporanea da un comando Execute

if OBJECT_ID('tempdb..#x') is not null 
drop table #x 

Create Table #x(aaa nvarchar(max)) 

declare @query2 nvarchar(max) 
set @query2 = 'SELECT [aaa] from IMP_TEMP' 

INSERT #x 
SELECT [aaa] from IMP_TEMP -- THIS WORKS 
SELECT *from #x 

INSERT #x 
exec @query2 -- THIS DOES NOT WORKS, WHY? 
SELECT *from #x 
+1

tabella La temperatura non è nella stessa portata di quello utilizzato per eseguire l'SQL dinamico. http://stackoverflow.com/questions/688161/tsql-writing-into-a-temporary-table-from-dynamic-sql/http://stackoverflow.com/questions/688161/tsql-writing-into-a- tabella-temporanea-da-dinamica-sql –

+1

@AlexK: Queste domande riguardano una tabella temporanea in un ambito interno che l'OP vuole leggere in un ambito esterno. Questa domanda riguarda l'opposto, che non è un problema. – Andomar

risposta

8

Hai solo bisogno di parentesi intorno alla variabile @query2. Il comando EXEC prevede l'esecuzione della stored procedure, mentre la funzione EXEC() è per l'esecuzione di sql dinamico come parametro.

INSERT #x 
exec (@query2) 
SELECT *from #x 

Reading material

0

A differenza dei commenti di Alex K, una tabella locale temporanea è visibile all'interno di tutti gli ambiti interni all'interno di una connessione. Il seguente frammento funziona benissimo:

create table #tbl (id int) 
exec ('select * from #tbl') 

È anche possibile utilizzare insert ... exec con tabelle temporanee:

create table #tbl (id int) 
insert #tbl values (3), (1), (4) 
insert #tbl exec ('select id from #tbl') 

Se questo non funziona per voi, si prega di inviare l'errore esatto. Un probabile colpevole è che insert ... exec richiede che la definizione della colonna della tabella e della query corrispondano esattamente.

0
INSERT #x 
exec @query2 -- THIS DOES NOT WORKS, WHY? 
SELECT *from #x 

Hai provato a usare il corretto synthax:

INSERT #x 
exec (@query2) 
SELECT *from #x 
+0

Nenad Zivkovic contrassegnato come corretta è stata documentata più informazioni sulla funzione exec –