数据库
首页 > 数据库> > 针对sql 2005优化的高性能分页存储过程

针对sql 2005优化的高性能分页存储过程

作者:互联网

原文链接:http://www.cnblogs.com/xiao_haun/archive/2011/01/23/1942580.html 存储过程代码如下: None.gifALTER PROCEDURE [dbo].[Pg_Paging]
None.gif@Tables varchar(1000), --表名,多红表是请使用 tA a inner join tB b On a.AID = b.AID
None.gif@PK varchar(100),    --主键,可以带表头 a.AID
None.gif@Sort varchar(200) = '', --排序字段
None.gif@PageNumber int = 1,    --开始页码
None.gif@PageSize int = 10,        --页大小
None.gif@Fields varchar(1000) = '*',--读取字段
None.gif@Filter varchar(1000) = NULL,--Where条件
None.gif@Group varchar(1000) = NULL,  --分组
None.gif@isCount bit = 0     --1    --是否获得总记录数
None.gifAS
None.gif--
None.gif--select * from GL_NEWS order by GN_UPDATE_DATE DESC
None.gif--exec Pg_Paging @Tables = 'tb_NewsInfo', @PK = 'News_ID', @Sort = 'News_ID DESC', @PageNumber = 2, @PageSize = 15,@Fields = '*', @Group = '', @isCount = 0
None.gifDECLARE @strFilter varchar(2000)
None.gifdeclare @sql varchar(8000)
None.gifIF @Filter IS NOT NULL AND @Filter != ''
None.gif  BEGIN
None.gif   SET @strFilter = ' WHERE ' + @Filter + ' '
None.gif  END
None.gifELSE
None.gif  BEGIN
None.gif   SET @strFilter = ''
None.gif  END
None.gif
None.gifif @isCount = 1 --只获得记录条数
None.gif    begin
None.gif        set @sql = 'SELECT  Count(*) FROM ' + @Tables + @strFilter  
None.gif    end
None.gifelse
None.gifbegin
None.gifif @Sort = ''
None.gif  set @Sort = @PK + ' DESC '
None.gif
None.gifIF @PageNumber < 1
None.gif  SET @PageNumber = 1
None.gif
None.gifif @PageNumber = 1 --第一页提高性能
None.gifbegin 
None.gif  set @sql = 'select top ' + str(@PageSize) +' '+@Fields+ '  from ' + @Tables + ' ' + @strFilter + ' ORDER BY  '+ @Sort
None.gifend 
None.gifelse
None.gif  begin
ExpandedBlockStart.gifContractedBlock.gif  /**//**//**//*Execute dynamic query*/    
None.gif   DECLARE @START_ID varchar(50)
None.gifDECLARE @END_ID varchar(50)
None.gifSET @START_ID = convert(varchar(50),(@PageNumber - 1) * @PageSize + 1)
None.gifSET @END_ID = convert(varchar(50),@PageNumber * @PageSize)
None.gif    set @sql =  ' SELECT '+@Fields+ '
None.gif   FROM (SELECT ROW_NUMBER() OVER(ORDER BY '+@Sort+') AS rownum, 
None.gif     '+@Fields+ '
None.gif      FROM ' ' +@strFilter++@Tables+'') AS D
None.gif   WHERE rownum BETWEEN '+@START_ID+' AND ' +@END_ID +' ORDER BY '+@Sort
None.gif  END
None.gif
None.gifEND
None.gif--print @sql
None.gif
None.gifEXEC(@sql)
可以通过封装一个静态函数来执行:(EnterpriseLibrary3。1)

None.gifusing System;
None.gifusing System.Data;
None.gifusing System.Data.Common;
None.gifusing System.Globalization;
None.gifusing System.Xml;
None.gifusing Microsoft.Practices.EnterpriseLibrary.Data;
None.gifusing Microsoft.Practices.EnterpriseLibrary.Data.Sql;
None.gifnamespace Glenet.EjiaShop.SqlData
None.gif{
None.gif    /// <summary>
None.gif    ///  Pageing
None.gif    /// </summary>
None.gif    public class Pageing
None.gif    {
None.gif        public Pageing()
None.gif        {
None.gif            //
None.gif            // TODO: 在此处添加构造函数逻辑
None.gif            //
None.gif        }
None.gif
None.gif        #region Pg_Paging
None.gif        /// <summary>
None.gif        /// Pg_Paging
None.gif        /// </summary>
None.gif        /// <param name="Tables"></param>
None.gif        /// <param name="PK"></param>
None.gif        /// <param name="Filter"></param>
None.gif        /// <returns></returns>
None.gif        public static int Pg_PageCount(string Tables,string PK,string Filter)
None.gif        {
None.gif            //创建数据库实例
None.gif            Database db = DatabaseFactory.CreateDatabase();
None.gif            //获得命令
None.gif            string sqlCommand = "Pg_Paging";
None.gif            DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand);
None.gif            //设置参数
None.gif            db.AddInParameter(dbCommand, "Tables", DbType.String, Tables);
None.gif            db.AddInParameter(dbCommand, "PK", DbType.String, PK);
None.gif            db.AddInParameter(dbCommand, "Sort", DbType.String, "");
None.gif            db.AddInParameter(dbCommand, "PageNumber", DbType.Double, 0);
None.gif            db.AddInParameter(dbCommand, "PageSize", DbType.Double, 0);
None.gif            db.AddInParameter(dbCommand, "Fields", DbType.String, "*");
None.gif            db.AddInParameter(dbCommand, "Filter", DbType.String, Filter);
None.gif            db.AddInParameter(dbCommand, "Group", DbType.String, "");
None.gif            db.AddInParameter(dbCommand, "isCount", DbType.Boolean, 1);
None.gif
None.gif            //执行
None.gif            return int.Parse(db.ExecuteScalar(dbCommand).ToString());    
None.gif            //取得输出参数
None.gif
None.gif
None.gif        }
None.gif        #endregion
None.gif
None.gif        #region Pg_Paging
None.gif        /// <summary>
None.gif        /// Pg_Paging
None.gif        /// </summary>
None.gif        /// <param name="Tables"></param>
None.gif        /// <param name="PK"></param>
None.gif        /// <param name="Sort"></param>
None.gif        /// <param name="PageNumber"></param>
None.gif        /// <param name="PageSize"></param>
None.gif        /// <param name="Fields"></param>
None.gif        /// <param name="Filter"></param>
None.gif        /// <param name="Group"></param>
None.gif        /// <returns></returns>
None.gif        public static DataSet Pg_Paging(string Tables,string PK,string Sort,int PageNumber,int PageSize,string Fields,string Filter,string Group)
None.gif        {
None.gif            //创建数据库实例
None.gif            Database db = DatabaseFactory.CreateDatabase();
None.gif            //获得命令
None.gif            string sqlCommand = "Pg_Paging";
None.gif            DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand);
None.gif            //设置参数            
None.gif            db.AddInParameter(dbCommand, "Tables", DbType.String, Tables);
None.gif            db.AddInParameter(dbCommand, "PK", DbType.String, PK);
None.gif            db.AddInParameter(dbCommand, "Sort", DbType.String, Sort);
None.gif            db.AddInParameter(dbCommand, "PageNumber", DbType.Double, PageNumber);
None.gif            db.AddInParameter(dbCommand, "PageSize", DbType.Double, PageSize);
None.gif            db.AddInParameter(dbCommand, "Fields", DbType.String, Fields);
None.gif            db.AddInParameter(dbCommand, "Filter", DbType.String, Filter);
None.gif            db.AddInParameter(dbCommand, "Group", DbType.String, Group);
None.gif            db.AddInParameter(dbCommand, "isCount", DbType.Boolean, 0);
None.gif
None.gif            //执行
None.gif            return db.ExecuteDataSet(dbCommand);    
None.gif        }
None.gif        #endregion
None.gif
None.gif
None.gif    }
None.gif
None.gif}
None.gif 前台:调用如下:
None.gifstring filter = "  1 = 1 ";
None.gif
None.gif        AspNetPager1.RecordCount = Glenet.EjiaShop.SqlData.Pageing.Pg_PageCount("tb_NewsInfo", "News_ID", filter);
None.gif        using (DataSet ds = Glenet.EjiaShop.SqlData.Pageing.Pg_Paging("tb_NewsInfo", "News_ID", "News_AddTime DESC", AspNetPager1.CurrentPageIndex, AspNetPager1.PageSize, "*", filter, ""))
ExpandedBlockStart.gifContractedBlock.gif        dot.gif{
InBlock.gif            this.Re_ContentList.DataSource = ds.Tables[0].DefaultView;
InBlock.gif            this.Re_ContentList.DataBind();
InBlock.gif
InBlock.gif            AspNetPager1.CustomInfoText = "记录总数:<font color=\"#00007f\"><b>" + AspNetPager1.RecordCount.ToString() + "</b></font>";
InBlock.gif            AspNetPager1.CustomInfoText += " 总页数:<font color=\"#00007f\"><b>" + AspNetPager1.PageCount.ToString() + "</b></font>";
InBlock.gif            AspNetPager1.CustomInfoText += " 当前页:<font color=\"red\"><b>" + AspNetPager1.CurrentPageIndex.ToString() + "</b></font>";
ExpandedBlockEnd.gif        } 相当方便。 文章来自:http://www.cnblogs.com/edobnet/archive/2008/01/23/1049985.html

转载于:https://www.cnblogs.com/xiao_haun/archive/2011/01/23/1942580.html

标签:varchar,string,DbType,sql,db,dbCommand,高性能,2005,AddInParameter
来源: https://blog.csdn.net/weixin_30732487/article/details/99059916