加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SqlServer 常用分页方法总结

发布时间:2020-12-12 13:16:58 所属栏目:MsSql教程 来源:网络整理
导读:SqlServer 常用分页方法总结 下面示例总结了,SqlServer数据库?常用分页方法,仅供学习参考 A、?使用 RowNumber 和 Between And 组合分页: /********** 使用 RowNumber 和 Between And 组合分页 **********/CREATE PROC proc_FuzzySearchAndPaging@pageIndex

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 ASC
			  )
			  ORDER BY s.s_id ASC
			  
     --总数据条数
     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,$pIndex*$pSize;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读