zoukankan      html  css  js  c++  java
  • 也谈存储过程分页

     最近我测试小春写的存储分页,发现有些许问题:
     建立一个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

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

  • 相关阅读:
    c# 使用Selenium模拟登录和操作数据的学习记录【续】
    c# 使用Selenium模拟登录和操作数据的学习记录
    使用bat一键安装mysql
    使用c#程序 添加iis网站目录的用户权限
    NOIp游记
    线规集合
    背包规划集合
    阴间扫描线
    11.30数学集合
    高精度运算
  • 原文地址:https://www.cnblogs.com/kwklover/p/8324.html
Copyright © 2011-2022 走看看