SQL with子句有多个结果

时间:2013-10-25 04:44:45

标签: sql sql-server-2008

我正在与with clause战斗两次返回一个结果集以及设置一个sql变量。 或者不知何故,我只想从with clause得到两个结果。 我的SQL查询是:

declare @total as int

;with T as
(
    // some sql query
)
select * from T

上面的查询返回一组结果,但我也想设置@total(T中的行数)。
这可能吗 ?谢谢

这也是两种做法的方式:

;with T as
    (
        select count(1), * from table1
    )
    select * from T

但这不是一种合适的方法,因为它会将count作为column返回。

2 个答案:

答案 0 :(得分:1)

请尝试以下查询:

select 
    count(*) over() [Count], 
    * 
From T

答案 1 :(得分:1)

目前尚不清楚你是如何从你的问题中调用它的。是通过存储过程,ADO.NET还是其他所有东西?

我不确定您希望如何在CTE中获取变量集。我不知道有什么方法可以做到这一点。

如果您使用的是存储过程,可能使用CTE用结果填充表变量,然后将表变量中的行数设置为out参数。

或者,您可以在从CTE中选择结果后使用@@ ROWCOUNT。以See this SO post为例。

使用上面的示例测试@@ ROWCOUNT会产生结果并返回结果的单独计数。见下文;

DECLARE @Total AS INT

;WITH T AS 
(
SELECT 2 AS a
UNION
SELECT 4
UNION
SELECT 6
UNION
SELECT 8
) SELECT * FROM T

SET @Total = (SELECT @@ROWCOUNT)

SELECT @Total