新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > 数据库 > sql server教程 > 正文:教你快速掌握两个分页存储过程的用法

教你快速掌握两个分页存储过程的用法

新客网 XKER.COM 2008-01-28 来源:赛迪网 38101 收藏本文

两个分页存储过程的用法:

[Basic_Pagination2005]:只能在SQLServer2005下用;

[Basic_Pagination2000]:可在SQLServer2000和SQLServer2005下通用;

两个存储过程的参数是一样的,其中的参数说明在代码中已有注释。

需要注重的是当@IsReCount=1时,会返回记录总数。所以在.NET中需用DataSet存放记录集。

第一个Table是要查询的字段数据,第二个Table便是记录总数。

1.Basic_Pagination2000

Create PROCEDURE [dbo].[Basic_Pagination2000]
@tblName      varchar(255),   -- 表名
@fidlelist    varchar(2000),  --要查询字段
@fldName      varchar(255),   -- 排序字段
@PageSize     int,            -- 页尺寸
@PageIndex    int,            -- 页码
@IsReCount    bit,            -- 返回记录总数, 非 0 值则返回
@OrderType    bit,            -- 设置排序类型, 非 0 值则降序
@strWhere     varchar(1000)   -- 查询条件 (注重: 不要加 where)
AS
declare @strSQL   varchar(6000)       -- 主语句
declare @strTmp   varchar(100),@tmpwhere  varchar(200)        -- 临时变量
declare @strOrder varchar(400)        -- 排序类型

if @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
set @tmpwhere='';
if(@strWhere!='')
begin
set @tmpwhere=' where ' @strWhere;
end
if @PageIndex = 1
begin
set @strSQL = 'select top ' 
  str(@PageSize)  ' ' @fidlelist ' ' 'from ['
  @tblName   '] '   @tmpwhere   ' '   @strOrder
end
else
begin
set @strSQL = 'select top ' 
  str(@PageSize)   ' ' @fidlelist ' ' 'from ['
  @tblName   '] where 
['   @fldName   ']'   @strTmp   '(['
  @fldName   ']) from 
(select top '   str((@PageIndex-1)*@PageSize)   ' ['
  @fldName   '] from 
['   @tblName   '] '   @tmpwhere   ' '
  @strOrder   ') as tblTmp)  
'   @tmpwhere   ' '   @strOrder
end
exec(@strSQL)
if @IsReCount != 0
begin
set @strSQL = 'select count(*) 
as Total from ['   @tblName   ']'  @strWhere
exec (@strSQL)
end

2.Basic_Pagination2005

ALTER PROCEDURE [dbo].[Basic_Pagination2005]
@tblName      nvarchar(200),     --表名
@fidlelist    nvarchar(1000),   --要查询字段
@fldName      nvarchar(100),    --排序字段
@PageSize     int,              --页尺寸
@PageIndex    int,              --页码
@IsReCount    bit ,             -- 返回记录总数, 非 0 值则返回
@OrderType    bit,              -- 设置排序类型, 非 0 值则降序
@strWhere nvarchar(1000)        --查询条件
AS
declare @sqlstr nvarchar(4000),
@tmpwhere nvarchar(4000),@tmporder nvarchar(100)
BEGIN
if @OrderType != 0
begin
set @tmporder = @fldName  ' desc '
end
else
begin
        set @tmporder = @fldName  ' asc '
end
set @tmpwhere='';
if(@strWhere!='')
begin
set @tmpwhere=' where ' @strWhere;
end
set @sqlstr=N'select * from
(select  ' @fidlelist ', ROW_NUMBER() OVER(order

by ' @tmporder ') as row from ' @tblName @tmpwhere ') 
tmp where row between ' cast

(((@PageIndex-1)*@PageSize 1) as nvarchar) ' and ' cast

(@PageIndex*@PageSize as nvarchar);  
exec sp_executesql @sqlstr
if @IsReCount != 0
begin
set @sqlstr=N'select count(*) as Total from '  @tblName @tmpwhere
exec sp_executesql @sqlstr    
end
END
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐