2012-12-21 67 views
7

我有一個動態查詢@strQuery,它在執行時給出了很多列的結果。 我想從這個動態查詢插入到臨時表中的結果。 我這樣做是因爲我想對臨時表執行一些過濾並獲得所需的結果。將執行動態查詢的結果插入表中

一個類似的問題被提出以前螺紋HERE 其中一個臨時表創建使用INSERT INTO插入第一和然後數據上。

我想避免這一步,因爲列的長列表以及字段的數據類型不爲我所知。

select * into #tmh from 
exec(@strQuery) 

錯誤消息

錯誤鄰近關鍵字 'EXEC' 的語法。

如何做到這一點?這樣做有可能嗎?如果沒有,請指定一些其他替代方法,以將執行動態查詢的結果存儲到表中。 謝謝。

回答

10

我以前也遇到這種情況,這裏是我做過什麼:

DECLARE @strQuery nVarchar(100) 

SET @strQuery='SELECT * into [tempdb].[dbo].[temptable] FROM YourTable' 

EXECUTE sp_executesql @strQuery 

SELECT * FROM [tempdb].[dbo].[temptable] 

DROP TABLE [tempdb].[dbo].[temptable] 

它工作正常。不要問我爲什麼一個FQ表名稱而不是#temptable。我不知道。這是行不通的。我可以把它用[tempdb中]工作。[DBO]。[不是Temptable]唯一的辦法

拉吉

+0

有沒有辦法做到這一點,而不改變我原來的動態查詢?它太複雜 –

+0

我嘗試了很多方法,但找不到工作解決方案來使用SELECT INTO即時創建臨時表。動態SQL不會有太多變化。你只是想添加「之前從 – Raj

+0

試圖......它不工作,有沒有一種方法來創建表,而不知道架構,而不是選擇*進入.. –

1

這樣進行

select t1.name,t1.lastname from(select * from table)t1. 

其中 「select * from表」 是你dyanmic查詢。這將返回你可以用作臨時表t1的結果,如示例中給出的那樣。

1

您可以在當前執行上下文,通過動態SQL使用OUTPUT選項設置使用變量。下面的示例代碼。

DECLARE @Amount AS MONEY 
DECLARE @SQL AS NVARCHAR(1000) 
SET @Amount = NULL 
SET @SQL = ('SELECT @amt=100') 
EXECUTE sp_executeSQL @SQL, N'@amt MONEY OUTPUT', @[email protected] OUTPUT 
SELECT @Amount 
1

是的,你可以使包含與插入這樣的原始查詢的新動態查詢:

declare @strNewQuery varchar(max) 
set @strNewQuery ='select * into #tmh from ('[email protected]+') as t' 
exec(@strNewQuery) 
0

我用這個解決 - 帶出動態查詢

這將使用表變量接收數據到程序

即使連接也可以應用到它

select * into #itemPhantom from @tbl_items_upload 

select * from #itemPhantom 

select #itemPhantom.itemreference from #itemPhantom left join phantom on phantom.name=#itemPhantom.PhantomName 
相關問題