7

我有一个动态查询@strQuery,它在执行时会给出一个包含很多列的结果。我想将此动态查询的结果插入到临时表中。我这样做是因为我想对临时表执行一些过滤并获得所需的结果。

在以前的线程HERE上提出了一个类似的问题 ,其中首先创建了一个临时表,然后使用INSERT INTO.

由于列的列表很长,而且我不知道字段的数据类型,我想避免这一步。

select * into #tmh from
exec(@strQuery)

错误信息

关键字“exec”附近的语法不正确。

这该怎么做 ?有可能以这种方式完成吗?如果不是,请指定其他替代方法以将执行动态查询的结果存储到表中。谢谢。

4

5 回答 5

14

我以前遇到过这种情况,这就是我所做的:

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]

于 2012-12-21T06:24:11.520 回答
1

像这样进行

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

其中“select * from table”是您的动态查询。这将返回结果,您可以将其用作示例中给出的临时表 t1。

于 2012-12-21T05:57:28.107 回答
1

您可以在当前执行上下文中使用变量,由带有 OUTPUT 选项的动态 SQL 设置。下面的示例代码。

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
于 2012-12-21T08:13:15.007 回答
1

是的,您可以使用如下插入创建一个包含原始查询的新动态查询:

declare @strNewQuery varchar(max)
set @strNewQuery ='select * into #tmh from ('+@strQuery+') as t'
exec(@strNewQuery)
于 2012-12-27T10:40:56.617 回答
0

我用它来解决 - 没有动态查询

这使用表变量来接收数据到过程

甚至可以对其应用连接

select * into #itemPhantom from @tbl_items_upload

select * from #itemPhantom

select #itemPhantom.itemreference from #itemPhantom  left join phantom on phantom.name=#itemPhantom.PhantomName
于 2016-01-02T13:11:02.560 回答