网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
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!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > SQL技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.SQL Server中多行多列连接成为单.
.了解SQL Server 2008的新压缩特性.
.SQL Server数据库查询优化的常用.
.[SQLServer2000]TEMPDB丢失或TEM.
.某些 SQL Server 2000 和 SQL Se.
.讲解SQL Server海量数据导入的最.
.一些比较常见的SQL Server扩展存.
.标准SQL规范中定义的四个事务隔离.
.深入理解CAST和CONVERT提供的具体.
.数据仓库基本报表制作过程中的SQ.
.讲解数据库管理系统必须提供的基.
.使你的 SQL 语句完全优化.
.大型MIS软件的开发必须重视数据库.
.以前编写Like谓词被忽略的使用方.
.SQL Server2005 Analysis服务实践.
.在SQL Server 2005数据库中进行错.
.实例讲解SQL Server中非常有用EX.
.数据库查询结果的动态排序(4).
.SQL Server 2005日志文件损坏的处.
.远程SQL SERVER服务器备份数据到.

SQLServer分页查询通用存储过程

发表日期:2007-2-23


自开始做项目以来,一直在用。这段存储过程的的原创者(SORRY,忘记名字了),写得这段SQL代码很不错,我在这个基础上,按照我的习惯以及思维方式,调整了代码,只做分页查询用。

/**//*----------------------------------------------
 *procedure name : prcPageResult
 *  author : FuChun
 *  create date : 2006-10-04
 */
CREATE PROCEDURE prcPageResult
-- 获得某一页的数据 --
@currPage int = 1,                                    --当前页页码 (即Top currPage)
@showColumn varchar(2000) = '*',           --需要得到的字段 (即 column1,column2,......)
@tabName varchar(2000),                           --需要查看的表名 (即 from table_name)
@strCondition varchar(2000) = '',              --查询条件 (即 where condition......) 不用加where关键字
@ascColumn varchar(100) = '',                 --排序的字段名 (即 order by column asc/desc)
@bitOrderType bit = 0,                            --排序的类型 (0为升序,1为降序)
@pkColumn varchar(50) = '',                   --主键名称
@pageSize int = 20                                --分页大小

AS
BEGIN -- 存储过程开始
-- 该存储过程需要用到的几个变量 / --
DECLARE @strTemp varchar(1000)
DECLARE @strSql varchar(4000)                   --该存储过程最后执行的语句
DECLARE @strOrderType varchar(1000)      --排序类型语句 (order by column asc或者order by column desc)

BEGIN
IF @bitOrderType = 1   -- bitOrderType=1即执行降序
BEGIN
    SET @strOrderType = ' ORDER BY '+@ascColumn+' DESC'
    SET @strTemp = '<(SELECT min'
END
ELSE
BEGIN
    SET @strOrderType = ' ORDER BY '+@ascColumn+' ASC'
    SET @strTemp = '>(SELECT max'
END

IF @currPage = 1    -- 如果是第一页
BEGIN
    IF @strCondition != ''
        SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+
            ' WHERE '+@strCondition+@strOrderType
    ELSE
        SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+@strOrderType
END

ELSE    -- 其他页
BEGIN
    IF @strCondition !=''
        SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+
        ' WHERE '+@strCondition+' AND '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currPage-1)*@pageSize)+
        ' '+@pkColumn+' FROM '+@tabName+@strOrderType+') AS TabTemp)'+@strOrderType
    ELSE
        SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+
        ' WHERE '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currPage-1)*@pageSize)+' '+@pkColumn+
        ' FROM '+@tabName+@strOrderType+') AS TabTemp)'+@strOrderType
END

END
EXEC (@strSql)
END  -- 存储过程结束
------------------------------------------------
GO
 调用方法:

prcPageResult 1,'*','TableName','','CreateDate',1,'PkID',25

 上面表示,查询表TableName的所有字段,前25条记录,因为是第一页,排序字段为CreateDate,降序排列,主键是PkID。这个存储过程的功能比较强大,用在项目中非常的适用。不信您可以试试看,尤其是在百万级数据上,他的优势就显露无疑了,当然,这段代码是可以转换成MySql中的存储过程的,不过,在这里就不给大家了,你们可以自己试着转换看看。

下面的存储过程查询表的记录数:

/**//*----------------------------------------------
 *procedure name : prcRowsCount
 *  author : FuChun
 *  create date : 2006-09-22
 */
CREATE PROC prcRowsCount
@tabName varchar(200),            --需要查询的表名
@colName varchar(200)='*',        --需要查询的列名
@condition varchar(200)=''       --查询条件
AS
BEGIN
    DECLARE @strSql varchar(255)
    IF @condition = ''
        SET @strSql='select count('+@colName+') from '+@tabName
    ELSE
        SET @strSql='select count('+@colName+') from '+@tabName+' where '+@condition
    EXEC (@strSql)
END
------------------------------------------------
GO
还有删除记录的通用存储过程和查询单条记录的通用存储过程在这里就不奉送了,感谢提供原通用分页查询存储过程的哥们,谢谢。
http://blog.csdn.net/fcrpg2005/archive/2007/02/22/1512707.aspx

上一篇:远程SQL SERVER服务器备份数据到客户机 人气:5056
下一篇:如何恢复/修复SQL Server的MDF文件 人气:5026
浏览全部存储过程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐