数据库分页

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

SET  QUOTED_IDENTIFIER  ON  
GO  
SET  ANSI_NULLS  ON  
GO  



CREATE   PROCEDURE  Paging_Cursor ( 
@Tables   varchar ( 1000 ), 
@PK   varchar ( 100 ), 
@Sort   varchar ( 200 =   NULL
@PageNumber   int   =   1
@PageSize   int   =   10
@Fields   varchar ( 1000 =   ' * '
@Filter   varchar ( 1000 =   NULL
@Group   varchar ( 1000 =   NULL
AS  

/*Find the @PK type*/  
DECLARE   @PKTable   varchar ( 100
DECLARE   @PKName   varchar ( 100
DECLARE   @type   varchar ( 100
DECLARE   @prec   int  

IF   CHARINDEX ( ' . ' @PK >   0  
BEGIN  
SET   @PKTable   =   SUBSTRING ( @PK 0 CHARINDEX ( ' . ' , @PK )) 
SET   @PKName   =   SUBSTRING ( @PK CHARINDEX ( ' . ' , @PK +   1 LEN ( @PK )) 
END  
ELSE  
BEGIN  
SET   @PKTable   =   @Tables  
SET   @PKName   =   @PK  
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  =   @PKTable   AND  c.name  =   @PKName  

IF   CHARINDEX ( ' char ' @type >   0  
SET   @type   =   @type   +   ' ( '   +   CAST ( @prec   AS   varchar +   ' ) '  

DECLARE   @strPageSize   varchar ( 50
DECLARE   @strStartRow   varchar ( 50
DECLARE   @strFilter   varchar ( 1000
DECLARE   @strGroup   varchar ( 1000

/*Default Sorting*/  
IF   @Sort   IS   NULL   OR   @Sort   =   ''  
SET   @Sort   =   @PK  

/*Default Page Number*/  
IF   @PageNumber   <   1  
SET   @PageNumber   =   1  

/*Set paging variables.*/  
SET   @strPageSize   =   CAST ( @PageSize   AS   varchar ( 50 )) 
SET   @strStartRow   =   CAST ((( @PageNumber   -   1 ) * @PageSize   +   1 AS   varchar ( 50 )) 

/*Set filter & group variables.*/  
IF   @Filter   IS   NOT   NULL   AND   @Filter   !=   ''  
SET   @strFilter   =   '  WHERE  '   +   @Filter   +   '   '  
ELSE  
SET   @strFilter   =   ''  
IF   @Group   IS   NOT   NULL   AND   @Group   !=   ''  
SET   @strGroup   =   '  GROUP BY  '   +   @Group   +   '   '  
ELSE  
SET   @strGroup   =   ''  

/*Execute dynamic query*/  
EXEC
' DECLARE @PageSize int 
SET @PageSize = 
'   +   @strPageSize   +   '  

DECLARE @PK 
'   +   @type   +   '  
DECLARE @tblPK TABLE ( 
PK 
'   +   @type   +   '  NOT NULL PRIMARY KEY 


DECLARE PagingCursor CURSOR DYNAMIC READ_ONLY FOR 
SELECT 
'   +   @PK   +   '  FROM  '   +   @Tables   +   @strFilter   +   '   '   +   @strGroup   +   '  ORDER BY  '   +   @Sort   +   '  

OPEN PagingCursor 
FETCH RELATIVE 
'   +   @strStartRow   +   '  FROM PagingCursor INTO @PK 

SET NOCOUNT ON 

WHILE @PageSize > 0 AND @@FETCH_STATUS = 0 
BEGIN 
     INSERT @tblPK (PK) VALUES (@PK) 
     FETCH NEXT FROM PagingCursor INTO @PK 
     SET @PageSize = @PageSize - 1 
END 

CLOSE PagingCursor 
DEALLOCATE PagingCursor 

SELECT 
'   +   @Fields   +   '  FROM  '   +   @Tables   +   '  JOIN @tblPK tblPK ON  '   +   @PK   +   '  = tblPK.PK  '   +   @strFilter   +   '   '   +   @strGroup   +   '  ORDER BY  '   +   @Sort  


GO  
SET  QUOTED_IDENTIFIER  OFF  
GO  
SET  ANSI_NULLS  ON  
GO
用数据库游标,直接在查询时就定义好你的每页的大小和当前查询的页数,查询出来的结果就是当前页
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值