2

假设我有一个存储过程,它调用了一个返回参数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 来完成。

4

2 回答 2

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。

于 2013-01-09T01:32:32.127 回答
1

不幸的是,你不能做你想做的事。戈登的回答是可以接受的,只是它没有向您的变量返回值。

你遇到了一个根本性的问题。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
于 2013-01-09T02:55:22.317 回答