新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > 数据库 > sql server教程 > 正文:通用分页存储过程,源码共享,大家共同完善

通用分页存储过程,源码共享,大家共同完善

新客网 XKER.COM 2006-09-01 来源: 收藏本文
   好久没有上来写点东西了,今天正好有空,共享一些个人心得,就是关于分页的存储过程,这个问题应该是老生重谈了,网上的通用存储过程的类型已经够多了,但是,好象看到的基本上不能够满足一些复杂的SQL语句的分页(也可能是我不够见多识广啊,呵呵),比如下面这句:

select '' as CheckBox, A.TargetID, A.TargetPeriod, Convert(varchar(10), B.BeginDate, 120) as BeginDate,
    Convert(varchar(10), B.EndDate, 120) as EndDate, C.SalesCode, C.SalesName, D.CatalogCode, D.CatalogName,
    E.OrgID, E.OrgName, F.OrgID as BranchOrgID, F.OrgCode as BranchOrgCode, F.OrgName as BranchOrgName,
    A.Amount, '' as DetailButton
from ChlSalesTarget as A
    left outer join ChlSalesTargetPeriod as B on A.TargetPeriod=B.TargetPeriod
    left outer join ChlSales as C on A.Sales=C.SalesCode
    left outer join ChlItemCatalog as D on A.ItemCatalog=D.CatalogCode
    left outer join ChlOrg as E on A.OrgID=E.OrgID
    left outer join ChlOrg as F on C.BranchOrgID=F.OrgID
where A.TargetPeriod >='200607' and A.TargetPeriod <='200608' and F.OrgCode like '%123%' and E.OrgCode like '%123%'
order by A.TargetPeriod desc,C.SalesName,D.CatalogName上面这句SQL里面有一些特殊情况,比如使用了Convert函数,而且没有主键,有多表连接,有表别名,字段别名等等,这些情况处理起来可能比较棘手,当然,其中的“'' as CheckBox”是我系统当中的特例情况,用来做一些处理的。
    我这里提供一个自己开发的通用分页存储过程,有什么好的建议和意见,大家请不吝指教。代码如下:
通用分页存储过程----Sp_Paging
/**//*
============================================================
功能:    通用分页存储过程
参数:
    @PK    varchar(50),            主键,用来排序的单一字段,空的话,表示没有主键,存储过程将自动创建标识列主键
    @Fields    varchar(500),        要显示的字段列表(格式如:ID,Code,Name)
    @Tables varchar(1000),        要使用的表集合(Org)
    @Where varchar(500),        查询条件(Code like '100')
    @OrderBy varchar(100),        排序条件(支持多个排序字段,如:ID,Code desc,Name desc)
    @PageIndex int,                当前要显示的页的页索引,索引从1开始,无记录时为0。
    @PageSize int,                页大小
创建者:Hollis Yao
创建日期:2006-08-06
备注:
============================================================
*/
CREATE PROCEDURE [dbo].[Sp_Paging]
    @PK    varchar(50)='',
    @Fields    varchar(500),
    @Tables varchar(1000),
    @Where varchar(500)='',
    @OrderBy varchar(100),
    @PageIndex int,
    @PageSize int
AS
--替换单引号,避免构造SQL出错
set @Fields = replace(@Fields, '''', '''''')

--要执行的SQL,切分为几个字符串,避免出现长度超过4k时的问题

收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐