SQL Server 2000通用分页查询存储过程(可指定返回字段,查询条件)

作者: LikeCode 出处: CODE STUDIO  <script type="text/javascript"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script>  

目前还有广大的用户在使用 Micrisoft SQL Server 2000, 但这个版的 DB 很致命的一个缺点是查询时不可指定返回行号的数据, 起码没有直接可用的关键字或方法, 幸好人类的智慧是无穷的(^^), 没有直接的方法就用间接的方法.

通用分页查询存储过程不同的版本多如牛毛, 我用过多种, 感觉还是李天王代码自动生成器里的那个好用, 在效率和功能上都做到很好的平衡, 我稍稍修改一下, 加个一个字段选择变量, 这样就可以指定返回的字段.

SQL 脚本如下: 

if   exists  ( select   *   from  dbo.sysobjects  where  id  =   object_id (N ' [dbo].[GetRecordByPage] ' and   OBJECTPROPERTY (id, N ' IsProcedure ' =   1 )
drop   procedure   [ dbo ] . [ GetRecordByPage ]
GO

CREATE   PROCEDURE  GetRecordByPage
    
@tblName        varchar ( 255 ),        --  表名
     @fldName        varchar ( 255 ),        --  主键字段名
     @PageSize       int   =   10 ,            --  页尺寸
     @PageIndex      int   =   1 ,             --  页码
     @OrderType      bit   =   0 ,             --  设置排序类型, 非 0 值则降序
     @strWhere       varchar ( 1000 =   '' --  查询条件 (注意: 不要加 where)
     @IsReCount      bit   =   0 ,             --  返回记录总数, 非 0 值则返回
     @FieldList      varchar ( 200 )         --  返回的字段
AS

declare   @strSQL     varchar ( 6000 )        --  主语句
declare   @strTmp     varchar ( 100 )         --  临时变量
declare   @strOrder   varchar ( 400 )         --  排序类型
if   @PageIndex   =   0
 
begin
  
set   @PageIndex   =   1
 
end
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

if   @strWhere   !=   '' -- -条件不为空
     set   @strSQL   =   ' select top  '   +   str ( @PageSize +   '   '   +   @FieldList   +   '  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 +   '   '   +   @FieldList   +   '  from [ '
    
+   @tblName   +   ' ] where [ '   +   @fldName   +   ' ] '   +   @strTmp   +   ' ([ '
    
+   @fldName   +   ' ]) from (select top  '   +   str (( @PageIndex - 1 ) * @PageSize +   '  [ '
    
+   @fldName   +   ' ] from [ '   +   @tblName   +   ' ] '   +   @strOrder   +   ' ) as tblTmp) '
    
+   @strOrder

    
set   @strTmp   = ''
    
if   @strWhere   !=   ''
        
set   @strTmp   =   '  where  '   +   @strWhere

if   @PageIndex   =   1
begin
    
set   @strSQL   =   ' select top  '   +   str ( @PageSize +   '   '   +   @FieldList   +   '  from [ '
        
+   @tblName   +   ' ] '   +   @strTmp   +   '   '   +   @strOrder
end

if   @IsReCount   !=   0
    
set   @strSQL   =   ' select count(*) as Total from [ '   +   @tblName   +   ' ] ' +   @strTmp

exec  ( @strSQL )


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值