数据库
首页 > 数据库> > SQL 2005最佳“分页”

SQL 2005最佳“分页”

作者:互联网

使用自定义分页创建记录“网格”时,什么是查询记录总数以及使用C#记录开始-结束的最佳/最佳方式?

SQL返回分页记录集:

SELECT Some, Columns, Here FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY Column ASC) AS RowId, *
    FROM
        Records
    WHERE
        (...)
) AS tbl
WHERE ((RowId > @Offset) AND (RowId <= (@Offset + @PageSize)) )

SQL计算记录总数:

SELECT COUNT(*) FROM Records WHERE (...)

现在,我两次访问服务器:一次用于获取记录,另一次用于计数记录的总数.

组合这些查询以避免多次数据库旅行的最佳方法是什么?

解决方法:

您可以将存储过程与输出参数(或返回值)一起使用以传递总行数.

create procedure dbo.Stuff_GetAll (
    @StartRowIndex int, -- zero based
    @MaximumRows int
)
as
begin
    declare @TotalRows int

    select @TotalRows = count(*) 
    ...

    if (@TotalRows > 0 and @MaximumRows > 0)
    begin
        ;with T as (
            select *, row_number() over ()
            ...
        )
        select T.* from T
        where Row between @StartRowIndex + 1 and (@StartRowIndex + @MaximumRows)
    end

    return @TotalRows
end
GO

您可能只想在请求第一页时将其添加到查询count()中(可能非常昂贵).

标签:sql-server-2005,sql,c,net
来源: https://codeday.me/bug/20191106/1999884.html