2017-06-12 115 views
1

我有不同的表循環,返回結果 與不同的列數。動態存儲查詢輸出TSQL

是否可以在不創建具體表的情況下存儲查詢的輸出?

我讀過關於臨時表的一些職位,所以我想這個簡單的例子:以上

create table #temp_table1 (id int) 

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

表1可以是任何表

我收到以下錯誤信息:

列名或提供的值數量與表格定義不匹配。

是否有避免硬編碼表定義完全匹配您的查詢輸出?

謝謝!

回答

3

你可以做一個select into - 將自動創建臨時表:

SELECT * INTO #Temp 
FROM TableName 

的問題是,由於使用的是動態SQL,你的臨時表將只提供動態SQL範圍內 - 這樣做這樣的事情,這將導致一個錯誤:

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

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

使用動態SQL,你必須使用一個全局臨時表做這種事情(你必須採用水滴做一次!):

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