分页存储过程-号称最完整

 缺陷之一就是主键只能有一个,而且看样子必须是递增型的数值型。

 

CREATE   procedure   [ dbo ] . [ proTableSelectPage ]
(
 
@Tables     varchar ( 1000 ),    -- 表名如testtable
  @PrimaryKey    varchar ( 100 ),    -- 表的主键,必须唯一性
  @Sort     varchar ( 200 =   NULL -- 排序字段如f_Name asc或f_name desc(注意只能有一个排序字段)
  @CurrentPage   int   =   1 ,     -- 当前页
  @PageSize    int   =   10 ,     -- 每页大小
  @Fields     varchar ( 1000 =   ' * ' -- 显示的字段列表
  @Filter     varchar ( 1000 =   NULL -- 条件语句,不加where,如 f_id>3
  @Group     varchar ( 1000 =   NULL -- 分组字段
  @TotalPage    int  OutPut     -- 返回总页数
)

-- WITH ENCRYPTION ---加密存储

AS

    
SET  NOCOUNT  ON
    
Declare   @intResult   Int     

    
Begin   Tran

    
DECLARE   @sql   nvarchar ( 4000 )
    
    
If   @Filter   is   null   or   @Filter = ''   
 
Begin
        
-- set @Sql = 'select @intResult = count(' + @PrimaryKey + ') from ' +  @Tables
         set   @Sql   =   ' select @intResult = count(*) from  '   +    @Tables
 
End
    
Else
 
Begin
        
-- set @Sql = 'select @intResult = count(' + @PrimaryKey + ') from ' +  @Tables + ' where + ' + @Filter    
         set   @Sql   =   ' select @intResult = count(*) from  '   +    @Tables   +   '  where +  '   +   @Filter     
 
End

    
EXEC  sp_executesql  @sql ,N ' @intResult int OUTPUT ' , @intResult  OUTPUT -- 计算总记录数
     select   @TotalPage = CEILING (( @intResult + 0.0 ) / @PageSize ) -- 计算总页数
    
    
    
IF   @Sort   IS   NULL   or   @Sort   =   ''
    
SET   @Sort   =   @PrimaryKey

    
DECLARE   @SortTable    VarChar ( 100 )
    
DECLARE   @SortName    VarChar ( 100 )
    
DECLARE   @strSortColumn   VarChar ( 200 )
    
DECLARE   @operator    Char ( 2 )
    
DECLARE   @type     VarChar ( 100 )
    
DECLARE   @prec     int
    
    
IF   CHARINDEX ( ' DESC ' , @Sort ) > 0
 
BEGIN
        
SET   @strSortColumn   =   REPLACE ( @Sort ' DESC ' '' )
        
SET   @operator   =   ' <= '
 
END
    
ELSE
 
Begin
  
IF   CHARINDEX ( ' ASC ' @Sort >   0
  
BEGIN   
   
SET   @strSortColumn   =   REPLACE ( @Sort ' ASC ' '' )
   
SET   @operator   =   ' >= '
  
END
  
ELSE     
  
BEGIN
   
SET   @strSortColumn   =   @SORT
   
SET   @operator   =   ' >= '
  
END
 
End
    
    
IF   CHARINDEX ( ' . ' @strSortColumn >   0
 
BEGIN
  
SET   @SortTable   =   SUBSTRING ( @strSortColumn 0 CHARINDEX ( ' . ' , @strSortColumn ))
  
SET   @SortName   =   SUBSTRING ( @strSortColumn CHARINDEX ( ' . ' , @strSortColumn +   1 LEN ( @strSortColumn ))
 
END
    
ELSE
 
BEGIN
  
SET   @SortTable   =   @Tables
  
SET   @SortName   =   @strSortColumn
 
END

    
Select   @type = t.name,  @prec = c.prec
    
FROM  sysobjects o   
    
JOIN  syscolumns c  on  o.id = c.id
    
JOIN  systypes t  on  c.xusertype = t.xusertype
    
Where  o.name  =   @SortTable   AND  c.name  =   @SortName
    
    
IF   CHARINDEX ( ' char ' @type >   0
 
Begin
  
SET   @type   =   @type   +   ' ( '   +   CAST ( @prec   AS   varchar +   ' ) '
    
End

    
DECLARE   @strPageSize    varchar ( 50 )
    
DECLARE   @strStartRow    varchar ( 50 )
    
DECLARE   @strFilter     varchar ( 1000 )
    
DECLARE   @strSimpleFilter   varchar ( 1000 )
    
DECLARE   @strGroup     varchar ( 1000 )
    
    
IF   @CurrentPage   <   1
 
Begin
  
SET   @CurrentPage   =   1
    
End

    
SET   @strPageSize   =   CAST ( @PageSize   AS   varchar ( 50 ))
    
SET   @strStartRow   =   CAST ((( @CurrentPage   -   1 ) * @PageSize   +   1 AS   varchar ( 50 ))
    
    
IF   @Filter   IS   NOT   NULL   AND   @Filter   !=   ''
 
BEGIN
  
SET   @strFilter   =   '  Where  '   +   @Filter   +   '   '
  
SET   @strSimpleFilter   =   '  AND  '   +   @Filter   +   '   '
 
END
 
ELSE
 
BEGIN
  
SET   @strSimpleFilter   =   ''
  
SET   @strFilter   =   ''
 
END
    
 
IF   @Group   IS   NOT   NULL   AND   @Group   !=   ''
 
Begin
  
SET   @strGroup   =   '  GROUP BY  '   +   @Group   +   '   '
 
End
 
ELSE
 
Begin
  
SET   @strGroup   =   ''
    
End

 
set   @sql   =   ' DECLARE @SortColumn  '   +   @type   +   '
 SET ROWCOUNT 
'   +   @strStartRow   +   '
 Select @SortColumn=
'   +   @strSortColumn   +   '  FROM  '   +   @Tables   +   @strFilter   +   '   '   +   @strGroup   +   '  orDER BY  '   +   @Sort   +   '
 SET ROWCOUNT 
'   +   @strPageSize   +   '
 Select 
'   +   @Fields   +   '  FROM  '   +   @Tables   +   '  Where  '   +   @strSortColumn   +   @operator   +   '  @SortColumn  '   +   @strSimpleFilter   +   '   '   +   @strGroup   +   '  orDER BY  '   +   @Sort   +   '
    
'
    
    
exec ( @sql )
    
print   @sql

 
If   @@Error   <>   0
 
Begin
  
RollBack   Tran
  
Return   - 1
 
End
 
Else
 
Begin
  
Commit   Tran
  
Return   @intResult   -- -返回记录总数
  End

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值