2012-12-21 39 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 
相关问题