注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

回忆之旅

我很向往山村的农庄生活,他们的热情,让我无法抗拒! 51EOO.COM

 
 
 

日志

 
 

sql server 2000分页存储过程例子  

2010-11-14 19:48:24|  分类: 技术分享 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
  CREATE PROCEDURE Paging_SubQuery (    
@Tables varchar(200),    
@PK varchar(50),    
@Sort varchar(100) = NULL,    
@PageNumber int = 1,    
@PageSize int = 10,    
@Fields varchar(2000) = '*',    
@Filter varchar(2000) = NULL,    
@Group varchar(50) = NULL,    
@RecordCount int out)    
AS       
/*Find the @PK type*/    
DECLARE @PKTable varchar(100)    
DECLARE @PKName varchar(100)    
DECLARE @type varchar(100)    
DECLARE @prec int    
DECLARE @strSQL nvarchar(4000)      
IF @Filter IS NOT NULL AND @Filter != ''    
begin    
    SET @strSql= ' SELECT  @RecordCount = Count (*)  FROM ' + @Tables+' Where ' + @Filter + ' '    
end    
else    
begin    
    SET @strSql= ' SELECT  @RecordCount = Count (*)  FROM ' + @Tables    
end    
EXEC   sp_executesql   @strSql,N'@RecordCount   int   OUTPUT',@RecordCount   OUTPUT--计算总页数    
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


sql server 2000分页存储过程例子 - Tony - 回忆之旅
  评论这张
 
阅读(111)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017