[英]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.