如何使用一个结果集从中生成多个操作结果集而不多次访问db?

时间:2014-04-21 07:37:33

标签: sql sql-server sql-server-2008 coldfusion qoq

我正在使用ColdFusion和SQL设计报告。这个reprot有3个部分。现在,所有3个部分都使用相同的数据集,但操作方式不同 显示不同的结果。我已经使用过CTE了。我已经为3个部分写了3个quoring。

WITH allOrders AS(  
Main query[With a lot of Joins]
)
SELECT  [Manupulated_Resultset_1]
FROM    allOrders 

WITH allOrders AS(  
Main query[With a lot of Joins]
)
SELECT  [Manupulated_Resultset_2]
FROM    allOrders 

WITH allOrders AS(  
Main query[With a lot of Joins]
)
SELECT  [Manupulated_Resultset_3]
FROM    allOrders 

因此,对于这三个部分,它对数据库进行了3次攻击,对于所有情况,主查询保持相同,只有子查询更改。 我知道这可以用更好的方式完成。所以我需要一种方法来存储主查询结果一次,然后使用它来获得不同的操作 结果

我不能在ColdFusion中使用查询查询来获取操作结果集,它涉及QOQ不支持的大量操作。

那么在SQL中有什么方法呢?

2 个答案:

答案 0 :(得分:5)

创建存储过程,使用临时表存储main query的结果,然后一次性将多个结果集返回给客户端:

create procedure proc_name
as
set nocount on
;with allOrders as (  
Main query[With a lot of Joins]
)
select *
into #allOrders
from allOrders;

SELECT  [Manupulated_Resultset_1]
FROM    #allOrders;
SELECT  [Manupulated_Resultset_2]
FROM    #allOrders;
SELECT  [Manupulated_Resultset_3]
FROM    #allOrders;

GO

http://www.adobe.com/devnet/coldfusion/articles/stored_procs.html

答案 1 :(得分:0)

使用查询查询 或创建一个连接必要表的数据库视图,以便您可以分配一些用于数据库端的资源。最佳实践是存储过程