SqlServer 经常使用分页方法总结

以下演示样例总结了,SqlServer数据库 经常使用分页方法,仅供学习參考

A、 使用 RowNumber 和 Between And 组合分页:

/********** 使用 RowNumber 和 Between And 组合分页 **********/
CREATE PROC proc_FuzzySearchAndPaging
@pageIndex int, --页索引
@pageSize int, --页大小
@SearchKey Nvarchar(10), --查询keyword
@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), --模糊匹配的keyword
@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">查询keyword</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)  --查询keyword
WITH t AS(
SELECT * FROM StuInfo s
WHERE s.s_name Like('%'+@SearchKey+'%')
)

暂时表 语句演示样例:

DECLARE @SearchKey Nvarchar(10)  --查询keyword
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;

SqlServer 经常使用分页方法总结的更多相关文章

  1. sqlserver两种分页方法比较

    -- 3000 page(从1开始) 10 pagesize -- 方法1(效率不高): SELECT TOP 10 * FROM [xxx].[oooo] WHERE id NOT IN (SELE ...

  2. EFCore中SQLSERVER 2008 的分页问题

    自SQLSERVER 2012起新增了 Offset Fetch 语法,因此EFCore默认是以此语法生成相应的分页语句的. 如果我们的目标数据库低于 2012,那么EFCore默认生成的语句在执行的 ...

  3. SQLServer转MYSQL的方法(连数据)[传]

    转自 https://blog.csdn.net/AlbenXie/article/details/77449720 SQLServer转MYSQL的方法(连数据) 本次转换需要依赖使用工具Navic ...

  4. sqlserver三种分页方式性能比较

    Liwu_Items表,CreateTime列建立聚集索引 第一种,sqlserver2005特有的分页语法 declare @page intdeclare @pagesize intset @pa ...

  5. SQL Server游标 C# DataTable.Select() 筛选数据 什么是SQL游标? SQL Server数据类型转换方法 LinQ是什么? SQL Server 分页方法汇总

    SQL Server游标   转载自:http://www.cnblogs.com/knowledgesea/p/3699851.html. 什么是游标 结果集,结果集就是select查询之后返回的所 ...

  6. Oracle、SQL Server、MySQL分页方法

    测试用例:查询TEST_TABLE表中TEST_COLUMN列的第10-20条数据 1,Oracle分页方法 SELECT A.* FROM ( SELECT ROWNUM ROWNO, B.* FR ...

  7. Sql Server 2012 的新分页方法分析(offset and fetch) - 转载

    最近在分析 Sql Server 2012 中 offset and fetch 的新特性,发现 offset and fetch 无论语法的简洁还是功能的强大,都是相当相当不错的 其中 offset ...

  8. phalcon几种分页方法

    phalcon几种分页方法 一: use Phalcon\Paginator\Adapter\Model as PaginatorModel; // Current page to show // I ...

  9. 只是一个用EF写的一个简单的分页方法而已

    只是一个用EF写的一个简单的分页方法而已 慢慢的写吧.比如,第一步,先把所有数据查询出来吧. //第一步. public IQueryable<UserInfo> LoadPagesFor ...

随机推荐

  1. 20道必须掌握的C++面试题

    20道必须掌握的C++面试题 在面试C++方面的工作时,经常会遇到各种面试题,这对应聘人员的知识掌握能力要求较高.本文将为大家带来的就是20道必须掌握的C++面试题,不要错过哦! 问1:请用简单的语言 ...

  2. 数据库课程设计 PHP web实现

    纪念一下自己写的东西.. 都说很垃圾就是了 直接用XAMPP做的 菜鸟网上学的PHP和HTML <!DOCTYPE html> <html> <head> < ...

  3. Navicat将表转为模型

    右键数据库 -> 逆向数据库到模型

  4. GC相关的面试题

    问题:Object的finaliz()方法 的作用是否与C++的析构函数作用相同? --->不同的 1.C++的析构函数调用确定,就是对象离开作用域之后就马上被删除.而java Object的f ...

  5. 2019天梯赛练习题(L2专项练习)

    7-2 列出连通集 (25 分) 给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序 ...

  6. [LOJ] 分块九题 7

    区间加法,区间乘法,单点查询. 洛谷线段树2 屡清加法乘法的关系,定义答案为 a*mut+add 对于整块: 新的乘w,mut和add都要乘w 新的加w,add加w //Stay foolish,st ...

  7. js event loop事件循环

    浏览器环境 以下两段代码是等价的.req对事件的回调设置,实际上就是当前主线程任务队列的任务. var req = new XMLHttpRequest(); req.open('GET', url) ...

  8. Linux项目发布流程

    Linux项目发布流程(一) 1.安装pyhton3.7 的依赖包 yum -y groupinstall "Development tools" yum -y install z ...

  9. Specified VM install not found: type Standard VM, name JDK1.8

    真正的问题解决方法在这里:在项目中,右键点击ant文件,选择Run As -- External Tools Configuration,在这个页面的顶端就会看到有红叉叉的报错,报错信息就是Speci ...

  10. Codeforces Round #321 (Div. 2)-A. Kefa and First Steps,暴力水过~~

    A. Kefa and First Steps time limit per test 2 seconds memory limit per test 256 megabytes input stan ...