【发布时间】:2013-01-09 00:23:56
【问题描述】:
假设我有一个存储过程,它有一个名为 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 来完成。
【问题讨论】:
-
实际上可能不是因为它返回一个额外的列而不是作为输出参数的东西。
-
是的,没有骰子。临时表可能是我最好的选择?
-
可能...您可以将:
SELECT @Count = COUNT(*) FROM Temp更改为SELECT @Count = @@ROWCOUNT? -
@malk 只会返回有关所选 10 行的信息,而不是未过滤返回的总数。有时 2 个单独的查询可以更好地工作。 Paul White 在 Sql Server Central 上发表了一篇文章,探讨了测试各种方法的分页。
标签: sql sql-server sql-server-2008 common-table-expression