号外号外: 原[图享网]更名为 码友网(codedefault.com) 啦,感谢大家一路上的陪伴与支持。代码的世界里,码友网与大家一起同行!

.NET(C#)开发中的SQL Server 2012通用轻松,高效分页查询SQL语句(可返回总记录数)

SQL Server 作者: Rector 12496阅读 0评论 0收藏 收藏本文

郑重申明:本文未经许可,禁止任何形式转载

sql_logo 整理一下.NET(C#)开发中SQL Server2012使用的通用分页查询SQL语句,此语句运用了SQL2012的OFFSET n ROWS FETCH NEXT m ROWS ONLY,可返回总记录数,以下是个人在实际使用中封装的一个查询方法,供参考:
#region SQL2012的分页(返回总记录数)
    public static DataSet GetPagingDataSetBySql2012(string tableName, string queryFields, string orderField, int pageIndex, int pageSize, string strWhere, out int totalCount)
    {
      if (orderField.Trim().Length <= 0)
      {
        throw new NoNullAllowedException();
      }
      if (queryFields.Trim().Length <= 0)
      {
        queryFields = "*";
      }
      totalCount = 0;
      var sql = new StringBuilder();
      sql.AppendFormat(" SELECT {0},COUNT(*) OVER(PARTITION BY '') AS Total", queryFields);
      sql.AppendFormat(" FROM {0}", tableName);
      if (strWhere.Trim().Length > 0)
      {
        sql.AppendFormat(" WHERE {0}", strWhere);
      }
      sql.AppendFormat(" ORDER BY {0}", orderField);
      sql.AppendFormat(" OFFSET {0} * {1} ROWS", pageIndex, pageSize);
      sql.AppendFormat(" FETCH NEXT {0} ROWS ONLY;", pageSize);
      var ds = DbHelperSQL.Query(sql.ToString());
      if (ds != null && ds.Tables[0].Rows.Count > 0)
      {
        var c = ds.Tables[0].Columns.Count;
        totalCount = Convert.ToInt32(ds.Tables[0].Rows[0][c - 1]);
      }
      return ds;
    }
    #endregion
相比用TOP * ... NOT IN 等SQL语句来说,此语句的执行效率那是显而易见的。

阅读了该文章的人还浏览了...

本文永久链接码友网 » .NET(C#)开发中的SQL Server 2012通用轻松,高效分页查询SQL语句(可返回总记录数)

发布于: 2014-10-22 13:03:48
分享扩散: