• 一个分页存储过程


    人家的,感觉不错,

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[PaginationDisplay]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[PaginationDisplay]
    GO

    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_NULLS ON
    GO

    /*
    按页得到信息,得到记录总条数
    */
    CREATE procedure PaginationDisplay
    (
    @TBName     nvarchar(2000)='',     --表名,默认为空
    @PageSize   int=10,               --每页记录数,默认为10
    @CurPage    int=1,                --当前页,默认第1页
    @KeyField   nvarchar(100)='ID',   --@TBName表的关键字段名,默认为ID
    @KeyAscDesc nvarchar(4)='ASC' ,   --关键字段的升、降序,默认为升序
    @Fields     nvarchar(500)='*',    --所选择的列名,默认为全选
    @Condition  nvarchar(200)='' ,    --where条件,默认为空
    @Order      nvarchar(200)=''      --排序条件,默认为空

    )
    as

    if @TBName=''
       begin
     raiserror('请指定表名!',11,1)
       return
       end
    if @PageSize<=0 or @CurPage<=0
       begin
     raiserror('每页记录数和当前页数都必须大于0!',11,1)
     return
       end
    if @KeyAscDesc='DESC'
       set @KeyAscDesc='<'
    else
       set @KeyAscDesc='>'
    if @Condition <> ''
       set @Condition=' where '+@Condition

    declare @SQL nvarchar(4000)

    set @SQL=''
    set @SQL='select count(*) from '+@TBName+@Condition+''

    select @SQL = 'declare @int int ;select @int = (' +@SQL +');'
    select @SQL = @SQL+' declare @page int; if @int%'+convert(nvarchar(50),@PageSize)+' = 0 select @page = @int/'+convert(nvarchar(50),@PageSize)+' else select @page = @int/'+convert(nvarchar(50),@PageSize)+'+1;select @page'

    execute sp_executesql @SQL

    set @SQL=''

    if @CurPage=1
       begin 
                 set @SQL=@SQL+'select top '+cast(@PageSize as nvarchar(20))+' '+@Fields+' from '+@TBName+@Condition+' '+@Order
                
       end
    else
       begin       
     set @SQL=@SQL + 'declare @sLastValue nvarchar(100)' + char(13) 
     set @SQL=@SQL+'select top '+cast((@PageSize * (@CurPage - 1)) as nvarchar(20))+' @sLastValue='+@KeyField+' from '+@TBName+@Condition+' '+@Order+char(13)
     
     declare @Condition2 nvarchar(200)
     if @Condition=''
      set @Condition2=' where '+@KeyField+@KeyAscDesc+'@sLastValue '
     else
         set @Condition2=' and '+@KeyField+@KeyAscDesc+'@sLastValue '

     set @SQL=@SQL+'select top '+cast(@PageSize as nvarchar(20))+' '+@Fields+ ' from '+@TBName+@Condition+@Condition2+@Order
       end
    execute sp_executesql @SQL


    GO
    SET QUOTED_IDENTIFIER OFF
    GO
    SET ANSI_NULLS ON
    GO


     

    本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。

  • 相关阅读:
    Kotlin基础-异常处理错误
    Kotlin基础-对象声明和表达式
    Kotlin基础-枚举类
    Kotlin基础-数据类
    Kotlin基础-可见修饰符、嵌套类
    Kotlin基础-类、属性、方法
    Kotlin基础-函数
    Kotlin基础-控制流
    Kotlin基础-集合类型 Map
    Kotlin基础-集合类型 Set
  • 原文地址:https://www.cnblogs.com/zjypp/p/2319507.html
Copyright © 2020-2023  润新知