同时创建临时表和执行命令的存储结果

时间:2017-01-19 11:28:31

标签: sql-server tsql c#-4.0 entity-framework-6

我有一个存储过程,我正在运行/执行一个声明的变量,该变量设置为数据透视表的select查询,重要的是该数据透视表正在将列转换为n行。是的行没有修复,这就是我在创建具有固定列的临时表时遇到问题的原因。我想要的是通过执行execute命令创建临时表,因此列将由select / insert语句确定。 以下是查询。

SELECT @cols = @cols + QUOTENAME(item) + ',' 
FROM (select distinct item from #TableData ) as tmp
select @cols = substring(@cols, 0, len(@cols)) 


set @tequery = 
'SELECT * from 
(
    select Sno, item, SoldValue from #TableData
) mytbl
pivot 
(
    max(ValueInDhs) for GroupName in (' + @cols + ')
) newTable'

execute(@tablequery)

我想将@tequery的结果存储到临时表中或者更好这个存储过程应该返回结果集而不是int,因为我已经插入到我的实体框架中的程序中,它显示(插入后)其返回类型为中间体

1 个答案:

答案 0 :(得分:1)

您可以使用全局(##)临时表执行此操作,但您必须注意同时执行此操作的多个进程。这是一个例子:

declare @sql varchar(max) = '
select *
into ##temp -- create global temp table
from   (
          select name
               , create_date = convert(varchar(4), create_date, 102) 
          from   sys.objects) as o
pivot ( count(name) for create_date in ([2017],[2016],[2012], [2009],[2003])
) as p;
'
exec (@sql)

-- if you do not want to use the global table, select it into a temp table
select * into #temp from ##temp

-- and drop the global
drop table ##temp

select * from #temp