假设我有一个存储过程,它有一个名为Count
的返回参数,它由以下SQL组成:
with temp as
(
SELECT ROW_NUMBER() OVER( ORDER BY o.createDate) as rowNum,
o.orderId
FROM Orders as o
)
SELECT * FROM temp where rowNum BETWEEEN 10 and 20
SELECT @Count = COUNT(*) FROM Temp
目前这会因为Temp
在第一次选择后消失而中断。我是否可以将返回参数的值设置为我的CTE中的总行数和从10-20返回行?
我想我可能不得不使用临时表来做这件事,但我很好奇是否可以使用CTE来完成。
答案 0 :(得分:4)
您可以将值直接放入temp:
with temp as
(
SELECT ROW_NUMBER() OVER( ORDER BY o.createDate) as rowNum,
count(*) over () as cnt,
o.orderId
FROM Orders as o
)
SELECT * FROM temp where rowNum BETWEEEN 10 and 20
然后你可以读取每行的cnt。
答案 1 :(得分:1)
不幸的是,你无法做你想做的事。 Gordon的答案是可以接受的,除了它没有为你的变量返回一个值。
您遇到了一个根本问题。 CTE只允许在其后进行一次查询。
临时表或表变量是唯一的方法。除非你会在CTE之外再次追踪表格以返回变量,如下所示:
with temp as
(
SELECT ROW_NUMBER() OVER( ORDER BY o.createDate) as rowNum,
o.orderId
FROM Orders as o
)
SELECT * FROM temp where rowNum BETWEEEN 10 and 20
SELECT @Count = COUNT(*) FROM Orders