2013-07-17 7 views
6

Ich muss Daten aus einer SELECT-Anweisung in eine temporäre Tabelle mit dem Befehl ausführen einfügen.Einfügen in eine temporäre Tabelle von einem Execute-Befehl

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

Die temporäre Tabelle nicht im gleichen Umfang wie das die dynamische SQL ausführen verwendet. http://stackoverflow.com/questions/688161/tsql-writing-into-a-montemo-table-from-dynamic-sql/ http://stackoverflow.com/questions/688161/tsql-writing-into-a- temporary-table-from-dynamic-sql –

+1

@AlexK: Diese Fragen beziehen sich auf eine temporäre Tabelle in einem inneren Bereich, die das OP in einem äußeren Bereich lesen möchte. Diese Frage betrifft das Gegenteil, was kein Problem ist. – Andomar

Antwort

8

Sie brauchen nur Klammern um @query2 Variable. EXEC Befehl ist gespeicherte Prozedur auszuführen, während EXEC() Funktion zum Ausführen von dynamischen SQL als Parameter verwendet wird.

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

Reading material

0

Im Gegensatz zu Kommentaren von Alex K. ist eine lokale temporäre Tabelle in allen inneren Bereichen innerhalb einer Verbindung sichtbar. Der folgende Ausschnitt läuft gut:

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

Sie auch insert ... exec mit temporären Tabellen verwenden können:

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

Wenn dies nicht für Sie arbeiten, bitte die genauen Fehler posten. Ein wahrscheinlicher Täter ist, dass insert ... exec fordert, dass die Spaltendefinition der Tabelle und der Abfrage genau übereinstimmen.

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

Haben Sie versucht, die richtige Synthax mit:

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

Nenad Zivkovic markiert korrekt, wie mehr Informationen über die Exec-Funktion dokumentiert wurde –