微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

发布两个分页存储过程

两个存储过程的参数是一样的:
[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 ), @tmpwhere2   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 = '' ;

set   @tmpwhere2 = '' ;

if ( @strWhere != '' )

begin

   
set   @tmpwhere = '   and   ' + @strWhere ;

   
set   @tmpwhere2 =   '  where  '   + @strWhere ;

end

if   @PageIndex   =   1

begin

    
set   @strsql   =   ' select top  '   +   str ( @PageSize + '   ' + @fidlelist + '   ' + ' from [ '

        
+   @tblName   +   ' '   +   @tmpwhere2   +   '   '   +   @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   +   ' '   +   @tmpwhere2   +   '   '

    
+   @strOrder   +   ' ) as tblTmp)    '   +   @tmpwhere   +   '   '   +   @strOrder

end

print   @strsql

exec ( @strsql )

if   @IsReCount   !=   0

    
begin

    
set   @strsql   =   ' select count(*) as Total from   '   +   @tblName   +   '    ' +   @tmpwhere2

    
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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐