2017-06-12 1 views
1

Ich habe eine Schleife über verschiedene Tabellen, die Ergebnisse mit unterschiedlicher Anzahl von Spalten zurückgibt.Abfrageausgänge dynamisch speichern TSQL

Ist es möglich, die Ausgabe einer Abfrage zu speichern, ohne eine konkrete Tabelle zu erstellen?

Ich habe einige Beiträge in Bezug auf temporäre Tabellen lesen, damit ich dieses einfache Beispiel versucht:

create table #temp_table1 (id int) 

insert into #temp_table1 ('select * from table1') 

tabelle1 über jeden Tisch

könnte

bekomme ich folgende Fehlermeldung:

Spaltennamen oder Anzahl der gelieferten Werte stimmt nicht mit der Tabellendefinition überein.

Gibt es trotzdem zu vermeiden, hart Code-Tabellendefinitionen zu haben, die exakt mit der Ausgabe Ihrer Abfrage übereinstimmen?

Dank!

Antwort

3

Sie könnten ein tun select into -, dass die temporäre Tabelle automatisch erstellt wird:

SELECT * INTO #Temp 
FROM TableName 

Das Problem ist, dass, da Sie dynamischen SQL verwenden, Ihre temporäre Tabelle nur in dem dynamischen SQL-Umfang verfügbar sein wird - so so etwas wie dies tun wird mit einem Fehler:

EXEC('SELECT * INTO #Temp FROM TableName') 

SELECT * 
FROM #Temp -- The #Temp table does not exists in this scope! 

diese Art der Sache zu tun dynamische SQL verwenden Sie eine globale temporäre Tabelle verwenden müssen (die Sie einmal durchgeführt unter Verwendung Drop müssen!):

EXEC('SELECT * INTO ##GlobalTempFROM TableName') 

SELECT * INTO #Temp 
FROM ##GlobalTemp -- Since this is a global temporary table you can use it in this scope 

DROP TABLE ##GlobalTemp