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