一个T-SQL查询输出到多个记录集

时间:2009-12-10 11:28:27

标签: sql-server tsql

不要问什么,但我需要一个SQL查询中的两个表。

喜欢这个......

Select Abc, Dgf from A

,结果是两个表

abc
1
1
1

dgf
2
2
2

更多细节? 好的,试试吧。

现在我喜欢这样:

    SELECT a.* from ActivityView as a with (nolock) 
where a.WorkplaceGuid = @WorkplaceGuid

    SELECT b.* from ActivityView as a with (nolock) 
left join PersonView as b with (nolock) on a.PersonGuid=b.PersonGuid  where a.WorkplaceGuid = @WorkplaceGuid 

很酷。但执行时间约为22秒。我这样做是因为在我的程序中我有自动从记录集中获取数据的类。班级活动和班级人员。这就是为什么我不能在一个记录集中创建它。程序没有解析它。

3 个答案:

答案 0 :(得分:3)

您可以编写一个包含两个SELECT的存储过程。

SELECT Abc FROM A AS AbcTable;

SELECT Dgf FROM A AS DfgTable;

根据您的具体要求,我会考虑提交两个单独的查询。我认为合并它们没有任何好处。

答案 1 :(得分:0)

SQL Server支持遗留COMPUTE BY子句,其行为几乎与GROUP BY相同但返回多个结果集(构成每个组的结果集后跟带有聚合的结果集):

WITH    q AS
        (
        SELECT  1 AS id
        UNION ALL
        SELECT  2 AS id
        )
SELECT  *
FROM    q
ORDER BY
        id
COMPUTE COUNT(id)
BY      id

然而,这已经过时,将来的版本将被删除。

答案 2 :(得分:0)

那些似乎不是过于复杂的查询(虽然select *通常不应该在生产中使用,并且从不在你进行连接时,因为它不必要地浪费资源发送连接字段的值两次)。因此,如果它需要22秒,那么要么返回大量数据,要么没有正确的索引。

您是否看过执行计划以查看导致缓慢的原因?