sql server中的分页数据查询

1.引言

今天在工作中遇到一个需要进行sql server分页数据查询的问题,但是分页数据查询的sql却忘记了,最终通过查询资料解决了该问题。现在把解决方法记下,以备查阅。

在这里需要感谢博客园Qlin

2.数据分页语句

假设需要查询表为Test,Test表中有个字段为ID(我这里用的是int型),当前页pageIndex=5,页大小pageSize=10。则分页查询语句如下:

SELECT * FROM (
  SELECT ROW_NUMBER() OVER (ORDER BY ID) AS ROWID,* FROM Test
) AS T WHERE T.ROWID BETWEEN (pageIndex-1) * pageSize+1 and pageIndex * pageSize;

3. C#实现

       /// <summary>
        /// 获取分页数据列表
        /// </summary>
        /// <param name="strFieldList">查询字段</param>
        /// <param name="strWhere">查询条件</param>
        /// <param name="strOrderBy">排序字段</param>
        /// <param name="pageIndex">当前页</param>
        /// <param name="pageSize">页大小</param>
        /// <returns></returns>
        public DataSet GetListByPage(string strFieldList, string strWhere, string strOrderBy, int pageIndex, int pageSize)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("select");
            if (string.IsNullOrEmpty(strFieldList))  //去除null
            {
                strFieldList = strFieldList.Trim();
                if (string.IsNullOrEmpty(strFieldList)) // 去除只有空格的字符串
                {
                    strFieldList = " * ";
                }
            }
            strSql.Append(" " + strFieldList + " ");
            strSql.Append(" from (select row_number() over (order by id) as rowid,");
            strSql.Append(strFieldList + "from Test");

            if (!string.IsNullOrEmpty(strWhere)) //去除null
            {
                strWhere = strWhere.Trim().ToLower();
                if (!string.IsNullOrEmpty(strWhere)) // 去除只有空格的字符串
                {
                    strWhere = (strWhere.StartsWith("where")) ? " " + strWhere : " where " + strWhere;
                    strSql.Append(strWhere);
                }
            }
            strSql.Append(") as t ");
            if (!string.IsNullOrEmpty(strWhere)) // 没有查询条件
            {
                strWhere += " and t.rowId between {0} and {1}";
            }
            else
            {
                strWhere = "where t.rowId between {0} and {1}";
            }
            strWhere = string.Format(strWhere, (pageIndex - 1) * pageSize + 1, pageIndex * pageSize);
            strSql.Append(strWhere);

            if (!string.IsNullOrEmpty(strOrderBy)) //去除null
            {
                strOrderBy = strOrderBy.Trim().ToLower();
                if (!string.IsNullOrEmpty(strOrderBy)) // 去除只有空格的字符串
                {
                    strOrderBy = (strOrderBy.StartsWith("order by")) ? " " + strOrderBy : " order by " + strOrderBy;
                    strSql.Append(strOrderBy);
                }
            }

            return DbHelperSQL.Query(strSql.ToString());
        }

4. 原文

Sql Server 数据分页

时间: 2024-09-30 19:59:25

sql server中的分页数据查询的相关文章

SQL Server中的分页查询 select top

SQL Server中的分页查询 https://blog.csdn.net/tswc_byy/article/details/82053091 零.码仙励志 比我差的人还没放弃,比我好的人仍在努力,我就更没资格说我无能为力 一.建库和建表 create database scort use scort create table emp ( empno int primary key, ename nvarchar(10), sal int, deptno int ) insert into e

sql Server中临时表与数据表的区别

sql server 中临时表与数据表的区别 1.如何判断临时表和数据表已生成 --如何判断临时表是否已创建--- if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#Temp_Student')) begin print '存在临时表'; end else begin print '不存在临时表'; end --如何判断数据表是否已创建--- if exists(select * from sys.ta

.SQL Server中 image类型数据的比较

原文:.SQL Server中 image类型数据的比较 在SQL Server中如果你对text.ntext或者image数据类型的数据进行比较.将会提示:不能比较或排序 text.ntext 和 image 数据类型,除非使用 IS NULL 或 LIKE 运算符.不过image也是不支持like比较的.那怎么样对数据库中的图片做比较呢.对于这种大型对象的处理,在Oracle中有有专门的函数DBMS_LOB.COMPARE,而SQLSERVER中没有专门的处理函数,只能通过使用substri

删除sql server中重复的数据

原文:删除sql server中重复的数据 with list_numbers as( select Name, AuthorOrTime, Url, Price, EstimatePrice, Size, Category, ROW_NUMBER() over (order by Name, AuthorOrTime, Url, Price, EstimatePrice, Size, Category) as 'rownumber' from Arts)delete list_numbers

SQL Server中sp_spaceused统计数据使用的空间总量不正确的原因

原文:SQL Server中sp_spaceused统计数据使用的空间总量不正确的原因 很多时候,我们经常使用sp_spaceused来查看表的空间使用情况,上个月群里有个网友说他使用DELETE删除了数据后,使用sp_spaceused查看,发现该表的分配的空间总量(reserved)与数据使用的空间总量(data)没有变化,当时和他讨论了并分析了一下原因,随手记录了一下这个案例,这个周末刚好有点时间,正好分析整理一下这个案例.分享在这篇文章.如下所示,我们先构造数据,我们的测试案例比较极端,

SQL Server 中的 JSON 数据

下面是 JSON 文本的示例 [{ "name": "John", "skills": ["SQL", "C#", "Azure"]}, { "name": "Jane", "surname": "Doe"}] 通过使用 SQL Server 内置函数和运算符,你可以对 JSON 文本执行以下操作: 分析 J

Sql Server中清空所有数据表中的记录

清空所有数据表中的记录: 代码如下:exec sp_msforeachtable  @Command1 ='truncate table ?'删除所有数据表: 代码如下:exec sp_msforeachtable 'delete   N''?'''清空SQL Server数据库中所有表数据的方法(有约束的情况) 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入死循环,二是这里使用了微软未正式公

SQL Server中的分页查询

分页查询很简单,具体代码如下: --分页查询 --查询1-3行数据 select top 3 * from emp order by sal desc; --查询4-6行数据 select top 3 * from emp where empno not in (select top 3 empno from emp order by sal desc) order by sal desc; --查询7-9行数据 select top 3 * from emp where empno not i

sql server中的大数据的批量操作(批量插入,批量删除)

首先我们建立一个测试用员工表 ---创建一个测试的员工表--- create table Employee( EmployeeNo int primary key, --员工编号 EmployeeName nvarchar(50) null, --员工名称 CreateUser nvarchar(50) null, --创建人 CreateDate datetime null, --创建时间 ) 执行后结果: 那么假如我们要批量插入10000条数据,应该怎么办? 这里有四种方法(普通循环,事务循