簡體   English   中英

將執行動態查詢的結果插入表中

[英]Insert result of executing dynamic query into a table

我有一個動態查詢@strQuery ,在執行時會給出一個包含大量列的結果。 我想將此動態查詢的結果插入臨時表。 我這樣做是因為我想對臨時表執行一些過濾並獲得所需的結果。

在先前的線程HERE中詢問了類似的問題,其中首先創建臨時表,然后使用INSERT INTO插入數據。

我想避免這一步,因為列列表很長,而且我不知道字段的數據類型。

select * into #tmh from
exec(@strQuery)

錯誤信息

關鍵字'exec'附近的語法不正確。

這該怎么做 ? 有可能以這種方式完成嗎? 如果沒有,請指定一些其他替代方法,以便將執行動態查詢的結果存儲到表中。 謝謝。

我以前遇到過這種情況,這就是我所做的:

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]

像這樣前進

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

其中“select * from table”是你的動態查詢。 這將返回結果,您可以將其用作示例中給出的臨時表t1。

您可以在當前執行上下文中使用變量,由Dynamic 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', @amt=@Amount OUTPUT
SELECT  @Amount

是的,您可以創建一個包含原始查詢的新動態查詢,其插入方式如下:

declare @strNewQuery varchar(max)
set @strNewQuery ='select * into #tmh from ('+@strQuery+') as t'
exec(@strNewQuery)

我用它來解決 - 沒有動態查詢

這使用表變量來接收數據到過程

甚至連接都可以應用於它

select * into #itemPhantom from @tbl_items_upload

select * from #itemPhantom

select #itemPhantom.itemreference from #itemPhantom  left join phantom on phantom.name=#itemPhantom.PhantomName

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM