2013-07-17 14 views
6

Potrzebuję wstawić dane z instrukcji select do tabeli tymczasowej za pomocą polecenia execute.Wstawianie do tabeli tymczasowej za pomocą polecenia Wykonaj

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

tabeli Temp nie jest w takim samym zakresie jak użyty do wykonania dynamicznego SQL. http://stackoverflow.com/questions/688161/tsql-writing-into-a-temporary-table-from-dynamic-sql/http://stackoverflow.com/questions/688161/tsqlwriting-into-a- temporary-table-from-dynamic-sql –

+1

@AlexK: Te pytania dotyczą tymczasowej tabeli w wewnętrznym zakresie, który OP chce przeczytać w zewnętrznym zakresie. To pytanie jest zupełnie przeciwne, co nie stanowi problemu. – Andomar

Odpowiedz

8

Potrzebujesz tylko nawiasów wokół zmiennej @query2. Komenda EXEC służy do wykonywania procedury składowanej, a funkcja EXEC() służy do wykonywania dynamicznego sql jako parametru.

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

Reading material

0

W przeciwieństwie do komentarzy Alex K, lokalny tabela tymczasowa jest widoczna we wszystkich wewnętrznych zakresach połączenia. Poniższy fragment przebiega prawidłowo:

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

Można również użyć insert ... exec z tabel tymczasowych:

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

Jeśli to nie zadziała, proszę zamieścić dokładny opis błędu. Jednym z możliwych winowajców jest to, że insert ... exec wymaga, aby definicja kolumny tabeli i zapytanie pasowały dokładnie.

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

Czy próbowałeś używając poprawnego synthax:

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

Nenad Zivkovic oznaczony jako poprawny, ponieważ więcej informacji o funkcji exec zostało udokumentowanych –

Powiązane problemy