分页存储过程(转)

分页存储过程(转)

CREATE PROC
 sp_PageView
@tbname     sysname,               要分页显示的表名



@FieldKey   nvarchar(1000),      用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段


@PageCurrent int=1,               要显示的页码


@PageSize   int=10,                每页的大小(记录数)


@FieldShow nvarchar(1000)=,      以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段


@FieldOrder nvarchar(1000)=,      以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC


                                          用于指定排序顺序
@Where    nvarchar(1000)=,     查询条件



@PageCount int OUTPUT             总页数


AS


SET NOCOUNT ON


检查对象是否有效


IF OBJECT_ID(@tbnameIS NULL


BEGIN

    

RAISERROR(N对象”%s”不存在,1,16,@tbname
)
    
RETURN



END


IF OBJECTPROPERTY(OBJECT_ID(@tbname),NIsTable)=0

    

AND OBJECTPROPERTY(OBJECT_ID(@tbname),NIsView)=0

    

AND OBJECTPROPERTY(OBJECT_ID(@tbname),NIsTableFunction)=0


BEGIN

    

RAISERROR(N“%s”不是表、视图或者表值函数,1,16,@tbname
)
    
RETURN



END


分页字段检查


IF ISNULL(@FieldKey,N)=


BEGIN

    

RAISERROR(N分页处理需要主键(或者惟一键),1,16
)
    
RETURN



END


其他参数检查及规范


IF ISNULL(@PageCurrent,0)<1 SET @PageCurrent=1


IF ISNULL(@PageSize,0)<1 SET @PageSize=10


IF ISNULL(@FieldShow,N)=N SET @FieldShow=N*


IF ISNULL(@FieldOrder,N)=N

    

SET @FieldOrder=N


ELSE

    

SET @FieldOrder=NORDER BY +LTRIM(@FieldOrder
)
IF ISNULL(@Where,N)=N


    

SET @Where=N


ELSE

    

SET @Where=NWHERE (+@Where+N)


如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数,对于不想计算总页数的处理而言,可以给@PageCount赋值)


IF @PageCount IS NULL


BEGIN

    

DECLARE @sql nvarchar(4000
)
    
SET @sql=NSELECT @PageCount=COUNT(*)


        

+N FROM +@tbname

        

+N +@Where

    

EXEC sp_executesql @sql,N@PageCount int OUTPUT,@PageCount
 OUTPUT
    
SET @PageCount=(@PageCount+@PageSize1)/@PageSize



END


计算分页显示的TOPN值


DECLARE @TopN varchar(20),@TopN1 varchar(20
)
SELECT @TopN=@PageSize

,
    
@TopN1=(@PageCurrent1)*@PageSize


第一页直接显示


IF @PageCurrent=1

    

EXEC(NSELECT TOP +@TopN

        

+N +@FieldShow

        

+N FROM +@tbname

        

+N +@Where

        

+N +@FieldOrder
)
ELSE



BEGIN

    

处理别名


    IF @FieldShow=N*

        

SET @FieldShow=Na.*

    
生成主键(惟一键)处理条件


    DECLARE @Where1 nvarchar(4000),@Where2 nvarchar(4000
),
        
@s nvarchar(1000),@Field

 sysname
    
SELECT @Where1=N,@Where2=N,@s=@FieldKey


    

WHILE CHARINDEX(N,,@s)>0

        

SELECT @Field=LEFT(@s,CHARINDEX(N,,@s)1
),
            
@s=STUFF(@s,1,CHARINDEX(N,,@s),N

),
            
@Where1=@Where1+N AND a.+@Field+N=b.+@Field

,
            
@Where2=@Where2+N AND b.+@Field+N IS NULL

,
            
@Where=REPLACE(@Where,@Field,Na.+@Field

),
            
@FieldOrder=REPLACE(@FieldOrder,@Field,Na.+@Field

),
            
@FieldShow=REPLACE(@FieldShow,@Field,Na.+@Field

)
    
SELECT @Where=REPLACE(@Where,@s,Na.+@s

),
        
@FieldOrder=REPLACE(@FieldOrder,@s,Na.+@s

),
        
@FieldShow=REPLACE(@FieldShow,@s,Na.+@s

),
        
@Where1=STUFF(@Where1+N AND a.+@s+N=b.+@s,1,5,N

),    
        
@Where2=CASE


            

WHEN @Where= THEN NWHERE (

            

ELSE @Where+N AND (

            

END+Nb.+@s+N IS NULL+@Where2+N)

    
执行查询


    EXEC(NSELECT TOP +@TopN

        

+N +@FieldShow

        

+N FROM +@tbname

        

+N a LEFT JOIN(SELECT TOP +@TopN1

        

+N +@FieldKey

        

+N FROM +@tbname

        

+N a +@Where

        

+N +@FieldOrder

        

+N)b ON +@Where1

        

+N +@Where2

        

+N +@FieldOrder
)
END


转载于:https://www.cnblogs.com/3_mu/archive/2010/06/27/1766131.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110758.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Idea配置SVN教程

    Idea配置SVN教程第一步:下载svn的客户端,通俗一点来说就是小乌龟啦!去电脑管理的软件管理里面可以直接下载,方便迅速下载之后直接安装就好了,但是要注意这里的这个文件也要安装上,默认是不安装的,如果不安装,svn中的bin目录下就会没有svn.exe,这个待会会用到,所以一点要注意哦。(都是坑啊)如果你不幸没点第二个,别着急,本文章末尾给你解决办法然后就下一步下一步就安装好了。配置svn的环境变量在此就…

    2022年5月14日
    239
  • pytorch Dataset, DataLoader产生自定义的训练数据「建议收藏」

    pytorch Dataset, DataLoader产生自定义的训练数据「建议收藏」pytorchDataset,DataLoader产生自定义的训练数据目录pytorchDataset,DataLoader产生自定义的训练数据1.torch.utils.data.Dataset2.torch.utils.data.DataLoader3.使用Dataset,DataLoader产生自定义训练数据3.1自定义Dataset3.2Da…

    2022年6月7日
    32
  • OSI模型「建议收藏」

    OSI模型「建议收藏」定义开放式系统互联通信参考模型(OpenSystemInterconnectionReferenceModel,缩写为OSI),简称为OSI模型。该模型是由ISO(国际标准化组织)定义,是个灵活稳健和可互操作的模型。目的规范不同系统的互联标准,使两个不同的系统能够较容易通信,而不需要改变底层的硬件和软件的逻辑。优点每层功能简单单一,标准化允许各种类型的网络硬件和软件相互通信…

    2022年10月23日
    0
  • pytorch之dataloader,enumerate

    pytorch之dataloader,enumeratefromtorch utils dataimportTe utils dataimportDa torch tensor 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 b tor

    2025年8月1日
    0
  • 安装oracle11g oci.exe,oracle 11g安装图解|安装oracle数据库软件详细教程[通俗易懂]

    安装oracle11g oci.exe,oracle 11g安装图解|安装oracle数据库软件详细教程[通俗易懂]oracle是非常强大的数据库软件,有很多朋友对oracle安装并不是很了解,因为除了安装还有一些变量需要设置,下面一起来看看oracle11g安装图解,定能帮助你快速安装oracle11g。Oracle11g安装图解:1、首先下载Oracle11gR2forWindows的版本本站下载地址:其中包括两个压缩包:win64_11gR2_database_1of2.zip,win64_…

    2022年9月21日
    0
  • 七彩虹 pci内存控制器 感叹号 蓝屏 DPC_WATCHDOG_VIOLATION

    七彩虹 pci内存控制器 感叹号 蓝屏 DPC_WATCHDOG_VIOLATIONsm总线控制器

    2022年6月5日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号