• (转)分页存储过程


    CREATE PROCEDURE GetRecordFromPage
        @tblName      varchar(255),       -- 表名
        @fldName      varchar(255),       -- 字段名
        @PageSize     int = 10,           -- 页尺寸
        @PageIndex    int = 1,            -- 页码
        @IsCount      bit = 0,            -- 返回记录总数, 非 0 值则返回
        @OrderType    bit = 0,            -- 设置排序类型, 非 0 值则降序
        @strWhere     varchar(1000) = ''  -- 查询条件 (注意: 不要加 where)
    AS

    declare @strSQL   varchar(6000)       -- 主语句
    declare @strTmp   varchar(100)        -- 临时变量
    declare @strOrder varchar(400)        -- 排序类型

    if @OrderType != 0
    begin
        set @strTmp = "<(select min"
        set @strOrder = " order by [" + @fldName +"] desc"
    end
    else
    begin
        set @strTmp = ">(select max"
        set @strOrder = " order by [" + @fldName +"] asc"
    end

    set @strSQL = "select top " + str(@PageSize) + " * from ["
        + @tblName + "] where [" + @fldName + "]" + @strTmp + "(["
        + @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
        + @fldName + "] from [" + @tblName + "]" + @strOrder + ") as tblTmp)"
        + @strOrder

    if @strWhere != ''
        set @strSQL = "select top " + str(@PageSize) + " * from ["
            + @tblName + "] where [" + @fldName + "]" + @strTmp + "(["
            + @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
            + @fldName + "] from [" + @tblName + "] where " + @strWhere + " "
            + @strOrder + ") as tblTmp) and " + @strWhere + " " + @strOrder

    if @PageIndex = 1
    begin
        set @strTmp = ""
        if @strWhere != ''
            set @strTmp = " where " + @strWhere

        set @strSQL = "select top " + str(@PageSize) + " * from ["
            + @tblName + "]" + @strTmp + " " + @strOrder
    end

    if @IsCount != 0
        set @strSQL = "select count(*) as Total from [" + @tblName + "]"

    exec (@strSQL)

    GO

    没试过,学习中

    /*SP6*/
    CREATE PROCEDURE dbo.getUserList
    @iPageCount int OUTPUT, --总页数
    @iPage int, --当前页号
    @iPageSize int --每页记录数
    as
    set nocount on --Set   Nocount   on   之后,系统常量@@rowcount不会被影响,即  
                    --返回的结果中不包含有关受   Transact-SQL   语句影响的行数的信息。
                   --前台一般是一个返回就当一个结果集,   不管这个返回是结果集,   还是操作的反馈信息.    
                   --为了保证前台得到的只是真实的记录集,   而不是反馈信息,   因此得使用   set   nocount   on
    begin
    --创建临时表
    create table #t (ID int IDENTITY, --自增字段
    userid int,
    username varchar(40))
    --向临时表中写入数据
    insert into #t
    select userid,username from dbo.[UserInfo]
    order by userid

    --取得记录总数
    declare @iRecordCount int
    set @iRecordCount = @@rowcount

    --确定总页数
    IF @iRecordCount%@iPageSize=0
    SET @iPageCount=CEILING(@iRecordCount/@iPageSize)
    ELSE
    SET @iPageCount=CEILING(@iRecordCount/@iPageSize)+1

    --若请求的页号大于总页数,则显示最后一页
    IF @iPage > @iPageCount
    SELECT @iPage = @iPageCount

    --确定当前页的始末记录
    DECLARE @iStart int --start record
    DECLARE @iEnd int --end record
    SELECT @iStart = (@iPage - 1) * @iPageSize
    SELECT @iEnd = @iStart + @iPageSize + 1

    --取当前页记录
    select * from #t where ID>@iStart and ID<@iEnd

    --删除临时表
    DROP TABLE #t

    --返回记录总数
    return @iRecordCount
    end
    go

  • 相关阅读:
    datasnap 2010 为DataSnap系统服务程序添加描述
    uLanguage.pas
    cxgrid上如何取FOOTER上合计的值
    cxgrid经典用法
    datasnap 2010 DataSnap服务端和客户端发布分发方法
    php_network_getaddresses: getaddrinfo failed 原因
    查看crontab运行状态
    laravel 开启定时任务需要操作
    解决cron不执行的问题
    UPdate语句
  • 原文地址:https://www.cnblogs.com/wellma/p/1525134.html
Copyright © 2020-2023  润新知