• 也谈存储过程分页


     最近我测试小春写的存储分页,发现有些许问题:
     建立一个test(id,name,fid)
     向test添充几十条数据,使id=1,2,3,4.........(即递增的integer),其他任意
     在T-sql Debugger给改存储过程分别传递如下参数:
        @queryStr= * from test
        @keyField=[ID]     
        @pageSize=3            
        @pageNumber=1
     问题出来了,看输出结果(注意id):
     id        name          fid
     4         kwklover       2
     5         kwklover       2
     6         kwklover       2
     根据传入参数,我们的预期应该是:
     id        name          fid
     1         kwklover       2
     2         kwklover       2
     3         kwklover       2

     下面是我参照小春存储分页写的分页存储过程,可以解决上面的问题:
    CREATE Procedure prGetRecordByPage
    (
       @PageSize int,   --每页的记录条数 
       @PageNumber int, --当前页面
       @QuerySql varchar(1000),--部分查询字符串,如* From Test order by id desc
       @KeyField varchar(500) 
    )
    AS
    Begin

     Declare @SqlTable AS varchar(1000)
     Declare @SqlText AS Varchar(1000)

     Set @SqlTable='Select Top '+CAST(@PageNumber*@PageSize AS varchar(30))+' '+@QuerySql
     Set @SqlText='Select Top '+Cast(@PageSize AS varchar(30))+' * From '
            +'(
    '+@SqlTable+') As TembTbA '
            +'Where
    '+@KeyField+' Not In (Select Top '+CAST((@PageNumber-1)*@PageSize AS varchar(30))+' '+@KeyField+' From '
            +'(
    '+@SqlTable+') AS TempTbB)'
     Exec(@SqlText)

    End
    GO

    至于效率如何,呵呵,我也不知道,
    因为我还不知道怎么测试存储过程的运行效率,希望各位朋友不吝赐教!先行谢过了

  • 相关阅读:
    [javaSE] 网络编程(浏览器客户端-自定义服务端)
    [javaSE] 网络编程(URLConnection)
    [javaSE] 网络编程(URL)
    [javaSE] IO流(FIle对象递归文件列表)
    tcping 与 telnet命令粗略使用
    让mysql监听ipv4
    shell脚本[] [[]] -n -z 的含义解析
    ansible的主机的默认配置部分
    MySQL备份与还原
    gunicorn 简介
  • 原文地址:https://www.cnblogs.com/kwklover/p/8324.html
Copyright © 2020-2023  润新知