教程中国
PHOTOSHOP CS9.0中文版 MAYA 8.5 FOR WINDOWS Corel Painter v9.0 Flash MX2004 中文版 Illustrator cs2 中文版
VC++6.0含sp6 中英文版 VB6.0 +sp6 简体中文版 Borland Delphi 7汉化版 MSDN for vb6.0中文版 Visual Studio 2005简体
教程中国下属 文件存储共享专家BIBIDU.COM 提供大型软件,教材,源码,电影,音乐,图书等下载 更多精品请点此进入
  您目前所在位置: 教程中国 >> Oracle >> PL/SQL >> sql 存储过程分页 RSS订阅
sql 存储过程分页
教程(视频,书籍)下载:  ASP.NET AutoCAD 数据库 C# ASP java photoshop 网页设计 delphi 3dmax Flash C++ VB 张孝祥 实例   更多请进入BIBIDU搜索
IT搜索引擎   

    CREATE PROC myx_prPageRecordset
    @queryStr nvarchar(1000),
    @keyField nvarchar (200),
    @pageSize int,
    @pageNumber int
    AS
    BEGIN
    DECLARE @sqlText AS nvarchar(4000)
    DECLARE @sqlTable AS nvarchar(4000)
    SET @sqlTable = 'SELECT TOP ' + CAST((@pageNumber + 1) * @pageSize AS varchar(30)) + ' ' + @queryStr
    SET @sqlText =
    'SELECT TOP ' + CAST(@pageSize AS varchar(30)) + ' * ' +
    'FROM (' + @sqlTable + ') AS tableA ' +
    'WHERE ' + @keyField + ' NOT IN(SELECT TOP ' +
    CAST(@pageNumber * @pageSize AS varchar(30)) + ' ' + @keyField +
    ' FROM (' + @sqlTable + ') AS tableB)'
    EXEC (@sqlText)
    END

    GO

    核心代码
    Dim strsql As String
    myComm = New SqlClient.SqlCommand("myx_prPageRecordset", myConn)
    myComm.CommandType = CommandType.StoredProcedure
    myComm.Parameters.Add(New SqlClient.SqlParameter("@queryStr", SqlDbType.NVarChar, 1000))
    myComm.Parameters("@queryStr").Value = " * from tbpage order by id DESC"
    myComm.Parameters.Add(New SqlClient.SqlParameter("@keyField", SqlDbType.NVarChar, 200))
    myComm.Parameters("@keyField").Value = "[id]"
    myComm.Parameters.Add(New SqlClient.SqlParameter("@pageSize", SqlDbType.NVarChar, 1000))
    myComm.Parameters("@pageSize").Value = PageSize
    myComm.Parameters.Add(New SqlClient.SqlParameter("@pageNumber", SqlDbType.NVarChar, 1000))
    myComm.Parameters("@pageNumber").Value = myPage - 1

    呵呵,执行几W条的代码只需150毫秒左右

    建立一个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

来源:upschool.com.cn
作者:
关键字:sql,存储过程分页
发表日期:2007-1-6 0:30:15

网页显示有限 阅读全文请下载本文完整版WORD文档

上一篇:Oracle9i表连接   下一篇:Warp 工具和代码迷惑


2008-12-3 5:30:20
本文的相类似文章
  • VB 列出SQL SERVER数据库中所有表及字段信息
  • MySQL登录缓冲区溢出漏洞
  • 用ASP批量更新SQL SERVER数据.
  • asp对SQL Server 数据库的备份与恢复(实例)
  • asp结合利用SQL群发简单邮件。
  • 防止SQL注入完整ASP代码
  • SQL数据库的一些攻击
  • SQL全文检索例讲
  • 邹键SQL通用分页存储过程
  • Oracle和mysql 的一些简单命令对比参照
  • 在学习中进步 在进步中成长 教程中国相随您的成长之路
    华腾联合科技股份有限公司版权所有
    广告联系:Rosibo@163.com