当前位置:  数据库>sqlserver

sql2005 高效分页存储过程(已优化)

    来源: 互联网  发布时间:2014-08-29

    本文导语:  1、分页存储过程:   代码示例: ALTER PROCEDURE [dbo].[Pg_Paging] @Tables varchar(1000), --表名,多红表是请使用 tA a inner join tB b On a.AID = b.AID @PK varchar(100),    --主键,可以带表头 a.AID @Sort varchar(200) = '', --排序字段 @PageNumber int = 1,   ...

1、分页存储过程:
 

代码示例:

ALTER PROCEDURE [dbo].[Pg_Paging]
@Tables varchar(1000), --表名,多红表是请使用 tA a inner join tB b On a.AID = b.AID
@PK varchar(100),    --主键,可以带表头 a.AID
@Sort varchar(200) = '', --排序字段
@PageNumber int = 1,    --开始页码
@PageSize int = 10, --页大小
@Fields varchar(1000) = '*',--读取字段
@Filter varchar(1000) = NULL,--Where条件
@Group varchar(1000) = NULL,  --分组
@isCount bit = 0     --1    --是否获得总记录数
AS
--select * from GL_NEWS order by GN_UPDATE_DATE DESC
--exec Pg_Paging @Tables = 'tb_NewsInfo', @PK = 'News_ID', @Sort = 'News_ID DESC', @PageNumber = 2, @PageSize = 15,@Fields = '*', @Group = '', @isCount = 0
DECLARE @strFilter varchar(2000)
declare @sql varchar(8000)
IF @Filter IS NOT NULL AND @Filter != ''
  BEGIN
   SET @strFilter = ' WHERE ' + @Filter + ' '
  END
ELSE
  BEGIN
   SET @strFilter = ''
  END

if @isCount = 1 --只获得记录条数
    begin
 set @sql = 'SELECT  Count(*) FROM ' + @Tables + @strFilter 
    end
else
begin
if @Sort = ''
  set @Sort = @PK + ' DESC '

IF @PageNumber < 1
  SET @PageNumber = 1

if @PageNumber = 1 --第一页提高性能
begin
  set @sql = 'select top ' + str(@PageSize) +' '+@Fields+ '  from ' + @Tables + ' ' + @strFilter + ' ORDER BY  '+ @Sort
end
else
  begin
  /**//*Execute dynamic query*/   
   DECLARE @START_ID varchar(50)
DECLARE @END_ID varchar(50)
SET @START_ID = convert(varchar(50),(@PageNumber - 1) * @PageSize + 1)
SET @END_ID = convert(varchar(50),@PageNumber * @PageSize)
    set @sql =  ' SELECT '+@Fields+ '
   FROM (SELECT ROW_NUMBER() OVER(ORDER BY '+@Sort+') AS rownum, '+@Fields+ '
      FROM ' ' +@strFilter++@Tables+'') AS D
   WHERE rownum BETWEEN '+@START_ID+' AND ' +@END_ID +' ORDER BY '+@Sort
  END

END
--print @sql

EXEC(@sql)

2、通过封装一个静态函数来执行:(EnterpriseLibrary3。1)
 

代码示例:

using System;
using System.Data;
using System.Data.Common;
using System.Globalization;
using System.Xml;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.EnterpriseLibrary.Data.Sql;
namespace Glenet.EjiaShop.SqlData
{
    ///
    ///  Pageing
    ///
    public class Pageing
    {
 public Pageing()
 {
     //
     // TODO: 在此处添加构造函数逻辑
     //
 }

 #region Pg_Paging
 ///
 /// Pg_Paging
 ///
 ///
 ///
 ///
 ///
 public static int Pg_PageCount(string Tables,string PK,string Filter)
 {
     //创建数据库实例
     Database db = DatabaseFactory.CreateDatabase();
     //获得命令
     string sqlCommand = "Pg_Paging";
     DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand);
     //设置参数
     db.AddInParameter(dbCommand, "Tables", DbType.String, Tables);
     db.AddInParameter(dbCommand, "PK", DbType.String, PK);
     db.AddInParameter(dbCommand, "Sort", DbType.String, "");
     db.AddInParameter(dbCommand, "PageNumber", DbType.Double, 0);
     db.AddInParameter(dbCommand, "PageSize", DbType.Double, 0);
     db.AddInParameter(dbCommand, "Fields", DbType.String, "*");
     db.AddInParameter(dbCommand, "Filter", DbType.String, Filter);
     db.AddInParameter(dbCommand, "Group", DbType.String, "");
     db.AddInParameter(dbCommand, "isCount", DbType.Boolean, 1);

     //执行
     return int.Parse(db.ExecuteScalar(dbCommand).ToString());   
     //取得输出参数


 }
 #endregion

 #region Pg_Paging
 ///
 /// Pg_Paging
 ///
 ///
 ///
 ///
 ///
 ///
 ///
 ///
 ///
 ///
 public static DataSet Pg_Paging(string Tables,string PK,string Sort,int PageNumber,int PageSize,string Fields,string Filter,string Group)
 {
     //创建数据库实例
     Database db = DatabaseFactory.CreateDatabase();
     //获得命令
     string sqlCommand = "Pg_Paging";
     DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand);
     //设置参数    
     db.AddInParameter(dbCommand, "Tables", DbType.String, Tables);
     db.AddInParameter(dbCommand, "PK", DbType.String, PK);
     db.AddInParameter(dbCommand, "Sort", DbType.String, Sort);
     db.AddInParameter(dbCommand, "PageNumber", DbType.Double, PageNumber);
     db.AddInParameter(dbCommand, "PageSize", DbType.Double, PageSize);
     db.AddInParameter(dbCommand, "Fields", DbType.String, Fields);
     db.AddInParameter(dbCommand, "Filter", DbType.String, Filter);
     db.AddInParameter(dbCommand, "Group", DbType.String, Group);
     db.AddInParameter(dbCommand, "isCount", DbType.Boolean, 0);

     //执行
     return db.ExecuteDataSet(dbCommand);   
 }
 #endregion
}
}

3、前台调用:
 

代码示例:

string filter = "  1 = 1 ";

 AspNetPager1.RecordCount = Glenet.EjiaShop.SqlData.Pageing.Pg_PageCount("tb_NewsInfo", "News_ID", filter);
 using (DataSet ds = Glenet.EjiaShop.SqlData.Pageing.Pg_Paging("tb_NewsInfo", "News_ID", "News_AddTime DESC", AspNetPager1.CurrentPageIndex, AspNetPager1.PageSize, "*", filter, ""))
 {
     this.Re_ContentList.DataSource = ds.Tables[0].DefaultView;
     this.Re_ContentList.DataBind();

     AspNetPager1.CustomInfoText = "记录总数:" + AspNetPager1.RecordCount.ToString() + "";
     AspNetPager1.CustomInfoText += " 总页数:" + AspNetPager1.PageCount.ToString() + "";
     AspNetPager1.CustomInfoText += " 当前页:" + AspNetPager1.CurrentPageIndex.ToString() + "";
 }


    
 
 

您可能感兴趣的文章:

  • 在SQL Server中使用SQL语句查询一个存储过程被其它所有的存储过程引用的存储过程名
  • java调用sql server存储过程,如何取存储过程返回码(不是结果集)
  • 急!如何从一个shell文件中传递一个参数到sql文件中,不能用存储过程
  • 在SQL server 2000中用JAVA实现图片存储
  • 用SQL统计SQLServe表存储空间大小的代码
  • 返回SQL执行时间的存储过程
  • java能否调用SQL-SERVER存储过程呢?如果能?如何调?
  • MySQL 存储过程中执行动态SQL语句的方法
  • 浅析SQL Server中包含事务的存储过程
  • SQL SERVER 利用存储过程查看角色和用户信息的写法
  • sql server中sp_reset_connection存储过程的作用
  • 浅析SQL存储过程和事务处理
  • sql 存储过程批量删除数据的语句
  • SQL创建的几种存储过程
  • Sql Server中存储过程中输入和输出参数(简单实例 一看就懂)
  • 关键字: oracle,存储过程,数据库,查询,动态sql包,数组,参传,jdbc 1
  • 请教一个JDBC调用SQL Server 存储过程的问题
  • SQL Server去除外键的存储过程
  • sql2005 存储过程技巧点滴记录
  • sql 判断函数、存储过程是否存在的代码整理
  • (X86/X64)安装sql server 2005 过程中提示“无法启动sql server的 启动”的解决方法
  • 请教各位,如何在JSP中调用SQL 过程?
  • oracle sql执行过程(流程图)
  • sql2005 存储过程分页示例代码
  • sql server 存储过程使用 IF ELSE 的例子
  • SQL Server创建链接服务器的存储过程示例分享
  • sql server 存储过程中If Else的用法举例
  • sql2005 存储过程的简单例子
  • SQL Server存储过程入门学习
  • sql server 存储过程的异常处理
  • sql2005中创建CLR存储过程的方法详解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 安装sql server 2008 management提示已安装 SQL Server 2005 Express的解决方法
  • 安装SQL2008时提示删除SQL2005Express工具的解决方法
  • sql server 2005 三个常用的小sql
  • sql2005 大数据量检索分页的sql代码
  • Sql2000与Sql2005共存安装的解决方法
  • sql2005 默认端口的修改方法
  • SQL SERVER 2005 最小安装经验
  • java调用sql server存储过程,如何取存储过程返回码(不是结果集) iis7站长之家
  • sql2005创建远程登录帐户的sql语句分享
  • 开启sql server 2005 的1433端口的方法
  • 解决MSSQL2005远程连接sql2000非默认端口数据库的问题
  • 如何减小Sql2005日志文件大小
  • MS-SQL Server 2005 其中三个版本的比较
  • asp连接sql server 2005的代码
  • 去哪里下载sql server 2005中的northwind和pubs数据库
  • 完美解决SQL server2005中插入汉字变成问号的问题
  • SQL Server 2005 还原数据库错误解决方法
  • sa用户无法登录sql server 2005的解决方法
  • sql2005递归查询的例子
  • sql2005统计技巧示例
  • java命名空间java.sql接口statement的类成员方法: executeupdate定义及介绍
  • 请问,这是什么错误!java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][Named Pipes]??????? SQL Server?虽然分少,但一定给,只要您是前5名回复者中最好的以为!
  • java命名空间java.sql接口connection的类成员方法: nativesql定义及介绍
  • SQL查询分析工具 SQL Workbench/J
  • java命名空间java.sql接口preparedstatement的类成员方法: executeupdate定义及介绍
  • oracle导出sql语句的结果集和保存执行的sql语句(深入分析)
  • java命名空间java.sql接口rowid的类成员方法: getbytes定义及介绍
  • SQL Server统计SQL语句执行时间的脚本
  • java命名空间java.sql接口ref的类成员方法: getbasetypename定义及介绍
  • SQL客户端软件 PKLite SQL Client
  • java命名空间java.sql接口databasemetadata的类成员方法: getsqlkeywords定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3