zoukankan      html  css  js  c++  java
  • 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 数据分页

    学到的就要教人
  • 相关阅读:
    SQL SERVER 2008 SA禁用,Windows帐户被删
    SQL Server表结构修改脚本
    请教高手,如何取得Target属性
    Installing Reporting Services on Windows 7, Vista or Windows Server 2008 无权限(rsAccessDenied)解决方法
    请教:如何在子页面关闭时把焦点设置到父页面的服务器控件上?
    order by newid() sql随机查询
    JS干货,笔记大全
    破解XP密码
    直接连接*.mdf 文件 获取随机数据
    总结C#获取当前路径的7种方法(转)
  • 原文地址:https://www.cnblogs.com/stonemqy/p/5128208.html
Copyright © 2011-2022 走看看