EXECUTE(@QUERY)
- 返回动态列
- ,如果我想保存在临时表中的数据的话,我必须首先用列和数据类型声明临时表。但我不知道有多少列通过EXECUTE(@QUERY)返回。
那么如何将EXECUTE(@QUERY)的动态输出保存到临时表中。如何存储从执行。在临时表数据(@QUERY),其中执行(@QUERY)返回动态表
EXECUTE(@QUERY)
那么如何将EXECUTE(@QUERY)的动态输出保存到临时表中。如何存储从执行。在临时表数据(@QUERY),其中执行(@QUERY)返回动态表
可以在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_tbl
与global temp table
和select create
语句做这将创建##temp table
。
如果@Query复杂,它将不起作用。例如,如果它有IF,SET,WHILE子句或使用CTE或类似的东西 – ventik
这是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
使用OPENROWSET http://stackoverflow.com/questions/653714/insert-results-of-a -stored-procedure-into-a-temporary-table – ventik
其完全不同....在我的情况下,列是动态的,所以我怎么能... –
首先你明白问题,然后给出答案... –