我正在与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
返回。
答案 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