2016-03-15 80 views
1
EXECUTE(@QUERY) 
  1. 返回动态列
  2. ,如果我想保存在临时表中的数据的话,我必须首先用列和数据类型声明临时表。但我不知道有多少列通过EXECUTE(@QUERY)返回。

那么如何将EXECUTE(@QUERY)的动态输出保存到临时表中。如何存储从执行。在临时表数据(@QUERY),其中执行(@QUERY)返回动态表

+0

使用OPENROWSET http://stackoverflow.com/questions/653714/insert-results-of-a -stored-procedure-into-a-temporary-table – ventik

+0

其完全不同....在我的情况下,列是动态的,所以我怎么能... –

+0

首先你明白问题,然后给出答案... –

回答

1

可以在sql server

declare @QUERY nvarchar(500) 
set @QUERY = 'select c1, c2, c3 from test_table' 

declare @create_sql nvarchar(500) 
set @create_sql = 'select * into ##temp_tbl from ('+ @QUERY + ') as x' 
EXEC sp_executesql @create_sql 

select * from ##temp_tbl 

这里select * into ##temp_tblglobal temp tableselect create语句做这将创建##temp table

+0

如果@Query复杂,它将不起作用。例如,如果它有IF,SET,WHILE子句或使用CTE或类似的东西 – ventik

1

这是OpenRowSet的解决方案。你只要把用临时表,你所有的工作动态SQL(或者可以使用全局临时表)

declare @Query nvarchar(max) 
set @Query = 
' 
select 1 as FirstColumn, ''Hello'' as SecondColumn, GetDate() as ThirdColumn 
union 
select 2 as FirstColumn, ''world'' as SecondColumn, GetDate() as ThirdColumn 
' 

execute(@Query) 

declare @sql nvarchar(max) 
set @sql = 

' 
select * into #MyTempTable 
from OPENROWSET(''SQLNCLI'', ''Server=(local);Trusted_Connection=yes;'', '''+ Replace(@Query, '''', '''''') +''') 

select * from #MyTempTable 
' 

exec sp_executeSQL @sql 

-- global table example 
set @sql = 

' 
select * into ##MyTempTableGlobal 
from OPENROWSET(''SQLNCLI'', ''Server=(local);Trusted_Connection=yes;'', '''+ Replace(@Query, '''', '''''') +''') 
' 

exec sp_executeSQL @sql 

select * from ##MyTempTableGlobal 
相关问题