SqlServer 常用分页方法总结
Posted 追夢秋陽
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SqlServer 常用分页方法总结相关的知识,希望对你有一定的参考价值。
SqlServer 常用分页方法总结
下面示例总结了,SqlServer数据库 常用分页方法,仅供学习参考
A、 使用 RowNumber 和 Between And 组合分页:
/********** 使用 RowNumber 和 Between And 组合分页 **********/
CREATE PROC proc_FuzzySearchAndPaging
@pageIndex int, --页索引
@pageSize int, --页大小
@SearchKey Nvarchar(10), --查询关键字
@TotalCount int OutPut --总数据条数
AS
BEGIN
--查询 当前页 数据
SELECT * FROM(
SELECT *,[NO]=ROW_NUMBER() OVER(ORDER BY s.s_id DESC) FROM StuInfo s
WHERE s.s_name Like('%'+@SearchKey+'%')
) t
WHERE t.[NO] BETWEEN @pageSize*(@pageIndex-1)+1 AND @pageIndex*@pageSize
ORDER BY t.s_id DESC
--总数据条数
SELECT @TotalCount = COUNT(*) FROM StuInfo s WHERE s.s_name Like('%'+@SearchKey+'%')
END
GO
B、使用 TOP 和 NOT IN 组合分页:
/********** 使用 TOP 和 NOT IN 组合分页 **********/
CREATE PROC proc_FuzzySearchAndPaging2
@PageIndex int, --当前页索引
@PageSize int, --每页显示的数据条数
@FuzzyKey Nvarchar(20), --模糊匹配的关键字
@Count int OUTPUT --总数据条数(用来判断要分多少页)
AS
BEGIN
SELECT TOP(@PageSize) * FROM StuInfo s
WHERE s.s_name LIKE('%'+@FuzzyKey+'%')
AND s.s_id NOT IN(
SELECT TOP((@PageIndex-1)*@PageSize) s.s_id FROM StuInfo s
WHERE s.s_name LIKE('%'+@FuzzyKey+'%')
ORDER BY s.s_id DESC
)
ORDER BY s.s_id DESC
--总数据条数
SELECT @Count=COUNT(*) FROM StuInfo s WHERE s.s_name LIKE('%'+@FuzzyKey+'%')
END
GO
C、使用 Linq 的 Skip 和 Take 组合分页:
/// <summary>
/// 分页
/// </summary>
/// <param name="key">查询关键字</param>
/// <param name="pageIndex">页索引</param>
/// <param name="pageSize">页大小</param>
/// <param name="pageCount">总页数</param>
/// <returns></returns>
public IList<EA_Script> FuzzyPaging(String key, int pageIndex, int pageSize, ref int pageCount)
var query = from e in dc.EA_Script
where e.FName.Contains(key)
orderby e.Id descending
select e;
//总页数
pageCount = query.Count() % pageSize == 0 ?
(query.Count() % pageSize) : query.Count() / pageSize + 1;
return query.Skip(pageIndex - 1).Take(pageSize).ToList();
如有,更好方法欢迎拿出来分享!
扩充:分页时,可以充分借助 临时表 和 WITH AS 语句提高查询效率
WITH AS语句示例:
DECLARE @SearchKey Nvarchar(10) --查询关键字
WITH t AS(
SELECT * FROM StuInfo s
WHERE s.s_name Like('%'+@SearchKey+'%')
)
临时表 语句示例:
DECLARE @SearchKey Nvarchar(10) --查询关键字
SELECT * INTO #temp2 FROM (
SELECT * FROM StuInfo s WHERE s.s_name Like('%'+@SearchKey+'%')
) u
mysql 分页
SELECT u.* FROM users AS u
LIMIT ($pIndex-1)*$pSize,$pSize;
以上是关于SqlServer 常用分页方法总结的主要内容,如果未能解决你的问题,请参考以下文章