网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.使用一条SQL语句删除表中重复记录.
.[基础]9i新特性之五闪回查询.
.Linux的IP设置技巧.
.Squid应用简介.
.如何利用QCTO开发可重复使用的测.
.使用Index提示 强制使用索引.
.Oracle 数据库函数库.
.Oracle数据仓库的分层管理器解决.
.用Oracle 9i全索引扫描快速访问数.
.Oracle Spatial数据加密问题研究.
.在 Linux x86 上安装 Oracle 数据.
.表空间性能优化实例.
.ORACLE SQL性能优化系列(五).
.获得SQL表述式的详细信息.
.备份的控制文件和新的数据文件.
.[Oracle]进程结构和内存结构的实.
.Oracle SQL用法.
.Oracle PL/SQL语言基础(1).
.用SQL进行单表查询.
.浅谈Oracle 10G 闪回恢复区.

sql 存储过程分页

发表日期:2008-2-9


    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
上一篇:sql load的一点小总结 人气:694
下一篇:关于SQL优化的一些知识 人气:1065
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐