【发布时间】:2014-07-14 20:42:48
【问题描述】:
我在 sql server 2008 中有存储过程,用于对从数据库中的产品表返回的数据进行分页。我想要的是在同一个选择语句中返回总页数
ALTER PROCEDURE [dbo].[SP_GetProducts]
@PageSize int = 10,
@PageNumber int = 1,
@ProductCode nvarchar(50) = null,
@ProductName nvarchar(100) = null,
@TotalPages int = null output
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT TOP (@PageSize) *, @TotalPages = COUNT(*) FROM (
SELECT ROW_NUMBER() OVER (ORDER BY ProductId ASC) offset, * FROM (
SELECT *, count(*) over() AS TotalRows
FROM Products
) myquery
) paginator
WHERE offset >= (((@PageSize * @PageNumber) - @PageSize)) +1 and offset <= (@PageSize * @PageNumber)
【问题讨论】:
-
您是否尝试通过
count(*) * pagesize获取总数?你的代码有点混乱。 -
不确定我是否理解您的代码,但您可以执行多个选择以返回多个输出参数。
-
没有@TotalPages = COUNT() 代码工作,但我需要在同一选择语句的输出参数中返回 Count()
-
如果我执行多个选择以返回多个输出参数,那么程序的性能如何
-
将结果集存储在临时表中。从该表中获取两个输出参数,而不是运行完整查询,然后从完整查询中选择 count(*)。
标签: sql sql-server sql-server-2008