1. 按某个特定表查询的存储过程: declare @strSQL varchar(5000) — 主语句 if @doCount != 0 if @PageIndex = 1 –如果是第一页就执行以上代码,这样会加快执行速度 end 上述两个存储过程中,第一个使用特定的表,不利于多表的联合查询;后者由于使用了游标,执行的速度上不如前者. http://www.cnblogs.com/bigfun4000/archive/2006/09/07/497553.html
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 @strTmp varchar(110) — 临时变量
declare @strOrder varchar(400) — 排序类型
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
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
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
两个数据分页的存储过程_数据库技巧
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 两个数据分页的存储过程_数据库技巧
相关推荐
-      sql语句中的判断功能的使用方法
-      sql语句中的判断功能的使用方法
-      SQL语言中去掉小数点有效数字后面的所有0
-      ASP连接各种数据库的代码
-      在sql语句中实现md5功能
-      给access数据库减肥
-      asp连接access数据库代码(2)
-      更改 SQL Server 登录模式