网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
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教程,数据库安全,数据库文摘
本月文章推荐
.带有ODS的体系结构中数据仓库的设.
.将列更新从一个表传递到另一个表.
.如何用SQL写出当M*N时的螺旋矩阵.
.SQL Server平台上数据仓库管理员.
.更改数据库表中现有行内的任何或.
.net在sql server中的图片存取技术.
.microsoft sql server认证方式的.
.在SQL Server 2005中解决死锁.
.深入讲解如何删除仅为第一列相同.
.在Windows xp系统上安装了SQL se.
.SQL Server自动生成日期加数字的.
.如何找出消耗cup的进程信息和执行.
.sql server存储过程、存储函数的.
.SQL Server 7.0数据库的六种数据.
.品味SQL Server 2005的几个新功能.
.深入探讨SQL Server 2005噪声字词.
.Sql Server 2005 数据库维护计划.
.sql 语句 更改默认的sql server .
.SQL Server 2000遇到的两个问题及.
.优化数据库的思想及sql语句优化的.

两个数据分页的存储过程

发表日期:2006-9-8


1. 按某个特定表查询的存储过程:
CREATE PROCEDURE GetPagingData_bigfun
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列
@fldName varchar(255)='', -- 排序的字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@doCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)
AS

declare @strSQL varchar(5000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
declare @strOrder varchar(400) -- 排序类型

if @doCount != 0
 begin
 if @strWhere !=''
  set @strSQL = 'select count(*) as Total from [' + @tblName + '] where '+@strWhere
 else
  set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
 end
 --以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况:
else
 begin
 if @OrderType != 0 --如果@OrderType不是0,就执行降序,这句很重要!
  begin
  set @strTmp = '<(select min'
  set @strOrder = ' order by [' + @fldName +'] desc' 
  end
 else
  begin
  set @strTmp = '>(select max'
  set @strOrder = ' order by [' + @fldName +'] asc'
  end

 if @PageIndex = 1 --如果是第一页就执行以上代码,这样会加快执行速度
  begin
  if @strWhere != ''
   set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from [' + @tblName + '] where ' + @strWhere + ' ' + @strOrder
  else
   set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName + '] '+ @strOrder
  end
 else
  begin --以下代码赋予了@strSQL以真正执行的SQL代码 
   if @strWhere != ''''
    set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
   else
    set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + '"] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'+ @strOrder
  end

 end
exec (@strSQL)
GO
2. 按提供的SQL语句进行的分页(使用了游标)
CREATE procedure p_splitpage
@sql nvarchar(4000),--要执行的sql语句
@page int=1, --要显示的页码
@pageSize int,--每页的大小
@pageCount int=0 out,--总页数
@recordCount int=0 out,--总记录数
@SearchTime int=0 out
as
declare @usetime datetime
set @usetime=getdate()
set nocount on
declare @p1 int
exec sp_cursoropen @p1 output,@sql,@scrollopt=1,@ccopt=1,@rowcount=@pagecount output
set @recordCount = @pageCount
select @pagecount=ceiling(1.0*@pagecount/@pagesize)
,@page=(@page-1)*@pagesize+1
exec sp_cursorfetch @p1,16,@page,@pagesize
exec sp_cursorclose @p1
set  @SearchTime=datediff(ms,@usetime,getdate())
print @SearchTime
GO

上述两个存储过程中,第一个使用特定的表,不利于多表的联合查询;后者由于使用了游标,执行的速度上不如前者.

http://www.cnblogs.com/bigfun4000/archive/2006/09/07/497553.html

上一篇:MS SQL Server 2000系统数据类型 人气:11543
下一篇:SQL Artisan 1.3功能使用介绍 人气:4691
浏览全部存储过程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐