我有一个动态查询@strQuery
,在执行时会给出包含大量列的结果。
我想将此动态查询的结果插入临时表。
我这样做是因为我想对临时表执行一些过滤并获得所需的结果。
在之前的帖子HERE上提出了类似的问题
首先创建临时表,然后使用INSERT INTO
插入数据。
由于列列很长,我想避免这一步,而且我不知道字段的数据类型。
select * into #tmh from
exec(@strQuery)
错误消息
关键字'exec'附近的语法不正确。
怎么做?有可能以这种方式完成吗?如果没有,请指定一些其他替代方法,以便将执行动态查询的结果存储到表中。 感谢。
答案 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