繁体   English   中英

将值存储在临时表中

[英]Storing the values inside temp table

如何将以下查询的结果放入临时表?

下面的查询给了我一些结果集。 我需要将结果集存储在临时表中,以便可以对该临时表执行一些联接

Declare @cols nvarchar(max),@query nvarchar(max)
select @cols = 
stuff( ( select  ',[' + Ltrim(rtrim(costelement)) +']' from WECCostElementsCalculation  FOR XML PATH('')),1,1,'');

select @query= 
'with T as 
(select wch.WECCostElementHeaderID,wceyb.WECCostElementsBreakUpID ,wch.WECCostID,WCEYB.ServiceTypeID,WCEYB.WarrantyCoverageID,wecec.CostElement,weceb.Cost
 from  WECCostElementsHeader WCH inner join  WECCostElementsYearBreakUp WCEYB on WCH.WECCostElementHeaderID
 =WCEYB.WECCostElementHeaderID INNER JOIN WECCostElementsBreakUp wecEB on wecEB.WECCostElementsBreakUpID=WCEYB.WECCostElementsBreakUpID  
 left join WECCostElementsCalculation wecec on wecEB.WECCostElementID = wecec.WECCostElementID
 ) 
 select * from T
 PIVOT
 (SUM(Cost) FOR CostElement IN ('+@cols+')) as pvt'

 exec sp_executesql @query

您首先需要创建表,该表将存储存储过程返回的数据。 确保该表具有与存储过程中的结果集相同的列。

CREATE TABLE #TempTable (WECCostElementHeaderID int, etc. ... )

现在,要将数据插入表中,您需要做的是:

INSERT INTO #TempTable
exec sp_executesql @query

仅出于快速测试目的:

create table #TempTable (id int)

declare @query nvarchar(100)

set @query = 'select 1 as id union select 2'

insert into #TempTable
exec sp_executesql @query

select *
from #TempTable

您必须创建一个临时表,然后只需在exec sp_executesql @query语句之前将Insert INTO #Temporary_Table(Col1,Col2,....) exec sp_executesql @query 就像下面这样:

DECLARE @cols NVARCHAR(max)
    ,@query NVARCHAR(max)

SELECT @cols = stuff((
            SELECT ',[' + Ltrim(rtrim(costelement)) + ']'
            FROM WECCostElementsCalculation
            FOR XML PATH('')
            ), 1, 1, '');

CREATE TABLE #Temporary_table(Col1 datatype,Col2 datatype,Col3.....)


SELECT @query = 'with T as 
(select wch.WECCostElementHeaderID,wceyb.WECCostElementsBreakUpID ,wch.WECCostID,WCEYB.ServiceTypeID,WCEYB.WarrantyCoverageID,wecec.CostElement,weceb.Cost
 from  WECCostElementsHeader WCH inner join  WECCostElementsYearBreakUp WCEYB on WCH.WECCostElementHeaderID
 =WCEYB.WECCostElementHeaderID INNER JOIN WECCostElementsBreakUp wecEB on wecEB.WECCostElementsBreakUpID=WCEYB.WECCostElementsBreakUpID  
 left join WECCostElementsCalculation wecec on wecEB.WECCostElementID = wecec.WECCostElementID
 ) 
 select * from T
 PIVOT
 (SUM(Cost) FOR CostElement IN (' + @cols + ')) as pvt'

INSERT INTO #Temporary_table(Col1,Col2,Col3.....)
EXEC sp_executesql @query

SELECT * FROM #Temporary_table

使用SELECT INTO:

select * 
into ##temp 
from T
PIVOT

然后在exec sp_executesql @query

SELECT * FROM ##temp

如果使用临时表,则应在主查询或其动态部分的顶部添加:

IF OBJECT_ID(N'##temp') IS NOT NULL DROP TABLE ##temp;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM