0

我正在与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

但它不是这样做的合适方法,因为它会返回countas column

4

2 回答 2

1

请尝试以下查询:

select 
    count(*) over() [Count], 
    * 
From T
于 2013-10-25T04:59:48.400 回答
1

目前尚不清楚您如何从您的问题中调用它。是通过存储过程、ADO.NET 还是其他方式?

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

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

或者,您可以在从 CTE 中选择结果后使用 @@ROWCOUNT。请参阅此 SO 帖子作为示例。

使用上面的示例测试 @@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
于 2013-10-25T06:14:04.360 回答