将执行动态查询的结果插入表中

时间:2012-12-21 05:50:53

标签: sql sql-server tsql

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

在之前的帖子HERE上提出了类似的问题 首先创建临时表,然后使用INSERT INTO插入数据。

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

select * into #tmh from
exec(@strQuery)

错误消息

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

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

5 个答案:

答案 0 :(得分:12)

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

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]

答案 1 :(得分:1)

像这样继续

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

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

答案 2 :(得分:1)

您可以在当前执行上下文中使用变量,由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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

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

偶数联接可以应用于它

select * into #itemPhantom from @tbl_items_upload

select * from #itemPhantom

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