• 可按任意字段排序的分页存储过程


     
    第二种方案的思想是这样的,先用倒序的SELECT TOP (页序号+1)*页尺寸的方法取得AE结果集,再从AE结果集中用NOT IN 的方法排除掉用SELECT TOP 页序号*页尺寸的方法取得的结果集,最后,对目标结果集执行倒序,下面是实现的代码
    滚轮缩放,点击查看大图 create   PROCEDURE  dbo.GetPagingRecord
    滚轮缩放,点击查看大图     (
    滚轮缩放,点击查看大图         @tablename 
    varchar ( 100 ), -- 表名或视图表
    滚轮缩放,点击查看大图
            @fieldlist  varchar ( 4000 ) = ' * ' , -- 欲选择字段列表
    滚轮缩放,点击查看大图
            @orderfield  varchar ( 100 ), -- 排序字段
    滚轮缩放,点击查看大图
            @keyfield  varchar ( 100 ), -- 主键
    滚轮缩放,点击查看大图
            @pageindex  int , -- 页号,从0开始
    滚轮缩放,点击查看大图
            @pagesize  int = 20 , -- 页尺寸
    滚轮缩放,点击查看大图
            @strwhere  varchar ( 4000 ), -- 条件
    滚轮缩放,点击查看大图
            @ordertype  bit = 1 -- 排序,1,降序,0,升序
    滚轮缩放,点击查看大图
        )
    滚轮缩放,点击查看大图
    AS
    滚轮缩放,点击查看大图
    /*
    滚轮缩放,点击查看大图 名称:GetPagingRecord
    滚轮缩放,点击查看大图 作用:按任意字段进行排序分页
    滚轮缩放,点击查看大图 作者:菩提树(MARK MA)
    滚轮缩放,点击查看大图 时间:2004-12-14
    滚轮缩放,点击查看大图 声明:此代码你可以无偿使用及转载,但在转载时,请勿移称本文字声明
    滚轮缩放,点击查看大图
    */

    滚轮缩放,点击查看大图     
    SET  NOCOUNT  ON
    滚轮缩放,点击查看大图     
    declare  @sqlstr  varchar ( 6000 )
    滚轮缩放,点击查看大图     
    -- 处理SQL中危险字符,并且将条件处理成易嵌入的形式
    滚轮缩放,点击查看大图
         set  @strwhere = replace (@strwhere, '''' , '''''' )
    滚轮缩放,点击查看大图     
    set  @strwhere = replace (@strwhere, ' -- ' , '' )
    滚轮缩放,点击查看大图     
    set  @strwhere = replace (@strwhere, ' ; ' , '' )
    滚轮缩放,点击查看大图     
    set  @sqlstr = ' declare @CurPageNum int; '
    滚轮缩放,点击查看大图     
    set  @sqlstr = @sqlstr + ' declare @nextpagenum int; '
    滚轮缩放,点击查看大图     
    set  @sqlstr = @sqlstr + ' set @curpagenum= ' + cast (@PageIndex  as   varchar ) + ' * ' + cast (@Pagesize  as   varchar ) + ' ; '
    滚轮缩放,点击查看大图     
    set  @sqlstr = @sqlstr + ' set @nextpagenum= ' + cast (@PageIndex + 1   as   varchar ) + ' * ' + cast (@Pagesize  as   varchar ) + ' ; '
    滚轮缩放,点击查看大图     
    set  @sqlstr = @sqlstr + ' declare @sqlstr varchar(6000); '
    滚轮缩放,点击查看大图     
    if  @ordertype = 1
    滚轮缩放,点击查看大图     
    begin
    滚轮缩放,点击查看大图     
    set  @sqlstr = @sqlstr + ' set @sqlstr= '' select  ' + @fieldlist + '  from ( select top  '' +cast(@nextpagenum as varchar)+ ''  * from 
    滚轮缩放,点击查看大图
    滚轮缩放,点击查看大图
    ' + @tablename + '   where  ' + @strwhere + '  order by  ' + @orderfield + '  desc ) as a where  ' + @keyfield + '  not in ( 
    滚轮缩放,点击查看大图
    滚轮缩放,点击查看大图 select top 
    '' +cast(@curpagenum as varchar)+ ''   ' + @keyfield + '  from  ' + @tablename + '  where  ' + @strwhere + '  
    滚轮缩放,点击查看大图
    滚轮缩放,点击查看大图 order by 
    ' + @orderfield + '  desc) order by  ' + @orderfield + '  desc '' ; '
    滚轮缩放,点击查看大图     
    end
    滚轮缩放,点击查看大图     
    else
    滚轮缩放,点击查看大图     
    begin
    滚轮缩放,点击查看大图     
    set  @sqlstr = @sqlstr + ' set @sqlstr= '' select  ' + @fieldlist + '  from ( select top  '' +cast(@nextpagenum as varchar)+ ''  * from 
    滚轮缩放,点击查看大图
    滚轮缩放,点击查看大图
    ' + @tablename + '   where  ' + @strwhere + '  order by  ' + @orderfield + '  asc ) as a where  ' + @keyfield + '  not in ( 
    滚轮缩放,点击查看大图
    滚轮缩放,点击查看大图 select top 
    '' +cast(@curpagenum as varchar)+ ''   ' + @keyfield + '  from  ' + @tablename + '  where  ' + @strwhere + '  
    滚轮缩放,点击查看大图
    滚轮缩放,点击查看大图 order by 
    ' + @orderfield + '  asc) order by  ' + @orderfield + '  asc '' ; '
    滚轮缩放,点击查看大图     
    end
    滚轮缩放,点击查看大图     
    set  @sqlstr = @sqlstr + ' execute( @sqlstr) '
    滚轮缩放,点击查看大图     
    -- print @sqlstr
    滚轮缩放,点击查看大图
         execute (@sqlstr)


    ==========================================================

    2009-9-1 gdjlc  修改:加上了返回记录总数

    CREATE PROCEDURE dbo.GetPagingRecord
        (
            @tablename varchar(100),--表名或视图表
            @fieldlist varchar(4000)='*',--欲选择字段列表
            @orderfield varchar(100),--排序字段
            @keyfield varchar(100),--主键
            @pageindex int,--页号,从0开始
            @pagesize int=20,--页尺寸      
            @strwhere varchar(4000),--条件
            @ordertype bit=1--排序,1,降序,0,升序
        )
    AS
    /**//*
    名称:GetPagingRecord
    作用:按任意字段进行排序分页
    作者:菩提树(MARK MA)
    时间:2004-12-14
    声明:此代码你可以无偿使用及转载,但在转载时,请勿移称本文字声明
    */
        SET NOCOUNT ON
        declare @sqlstr varchar(6000)
        --处理SQL中危险字符,并且将条件处理成易嵌入的形式
        set @strwhere=replace(@strwhere,'''','''''')
        set @strwhere=replace(@strwhere,'--','')
        set @strwhere=replace(@strwhere,';','')
        set @sqlstr='declare @CurPageNum int;'
        set @sqlstr=@sqlstr+'declare @nextpagenum int;'
        set @sqlstr=@sqlstr+'set @curpagenum='+cast(@PageIndex as varchar)+'*'+cast(@Pagesize as varchar)+';'
        set @sqlstr=@sqlstr+'set @nextpagenum='+cast(@PageIndex+1 as varchar)+'*'+cast(@Pagesize as varchar)+';'
        set @sqlstr=@sqlstr+'declare @sqlstr varchar(6000);'
        if @ordertype=1
        begin
        set @sqlstr=@sqlstr+'set @sqlstr=''select '+@fieldlist+' from ( select top ''+cast(@nextpagenum as varchar)+'' * from 
     
    '+@tablename+'   where '+@strwhere+' order by '+@orderfield+' desc ) as a where '+@keyfield+' not in ( 
     
    select top ''+cast(@curpagenum as varchar)+'' '+@keyfield+' from '+@tablename+' where '+@strwhere+'  
     
    order by '+@orderfield+' desc) order by '+@orderfield+' desc'';'
        end
        else
        begin
        set @sqlstr=@sqlstr+'set @sqlstr=''select '+@fieldlist+' from ( select top ''+cast(@nextpagenum as varchar)+'' * from 
     
    '+@tablename+'   where '+@strwhere+' order by '+@orderfield+' asc ) as a where '+@keyfield+' not in ( 
     
    select top ''+cast(@curpagenum as varchar)+'' '+@keyfield+' from '+@tablename+' where '+@strwhere+'  
     
    order by '+@orderfield+' asc) order by '+@orderfield+' asc'';'
        end
          
        begin
        set @sqlstr =@sqlstr + ' select count(*) as Total from ' + @tablename + ' where  '+ @strwhere + ';'
        end

        set @sqlstr=@sqlstr+'execute( @sqlstr)'
        --print @sqlstr
        execute(@sqlstr)
    GO

    -----------------------------------------------------------------------

    exec GetPagingRecord 'product','id,c_code,p_code,price','price','id',1,10,'1=1',1

  • 相关阅读:
    java基础
    mysql入门
    基础整理
    遍历列表的两种方式
    oracle常用操作
    DIV+CSS网页布局技巧实例1:设置网页整体居中的代码
    html+css 淘宝首页静态页面案例
    WEB前端开发规范文档+CSS命名规范
    day05-苏宁易购导航html
    day04-html
  • 原文地址:https://www.cnblogs.com/gdjlc/p/2086967.html
Copyright © 2020-2023  润新知