惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
D
DataBreaches.Net
博客园_首页
J
Java Code Geeks
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
罗磊的独立博客
腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
B
Blog
D
Docker
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
A
About on SuperTechFans
博客园 - 聂微东
Stack Overflow Blog
Stack Overflow Blog
WordPress大学
WordPress大学
MyScale Blog
MyScale Blog
G
Google Developers Blog
博客园 - 司徒正美
aimingoo的专栏
aimingoo的专栏
小众软件
小众软件
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 叶小钗
M
MIT News - Artificial intelligence
Recent Announcements
Recent Announcements

博客园 - laifangsong

请问福州哪里卖打折计算机图书,又可按原价开发票的? 关于目录访问的iis配置问题 福州招聘asp程序员 qq聊天的小秘密 吃鱼引发的问题和中国式管理 为什么点击flash链接到本页面,Request.Referrer将无法获得url来源 观察。总结 - 思想(一) 在csdn上看到奶牛问题,写了下算法 C#(1.1)邮件发送类,功能全面,调用灵活、方便 思考_070614 asp中JMail(4.4)发送邮件 单个文件上传类(可以自定义配置) iis6(win2003)中的aspnet_client和iis5,5.1(win2000,winxp)不一样,系统迁移时一定要注意。 看似诡异的session赋值错误 矩阵相乘(c) 委托:两个例子(主人仆人、打游戏) 取奇数游戏(c) 用递归算法求和为指定值N的所有组合 汉若塔问题(c)
不错的分页存储过程(转)
laifangsong · 2007-04-12 · via 博客园 - laifangsong

原文地址:
http://www.113317.com/blog/article.asp?id=252

做了简单修改,以适应多表联合查询。


CREATE  PROCEDURE sp_Paging
@tblName varchar(255) , -- 表名
@strGetFields varchar(1000= '*'-- 需要返回的列 
@fldName varchar(255)=''-- 排序的字段名
@pageSize int = 10-- 页尺寸
@pageIndex int = 1-- 页码
@recordCount int = 0 output, -- 返回记录总数
@pageCount int = 0 output, --分页总数
@orderType int = 0-- 设置排序类型, 非 0 值则降序
@strWhere varchar(1500= '' -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL nvarchar(3000-- 主语句
declare @strTmp varchar(110-- 临时变量
declare @strOrder varchar(400-- 排序类型

    
begin
        
if @strWhere !=''
            
set @strSQL = 'select @recordCount = count(*) from ' + @tblName + ' where '+@strWhere
        
else
            
set @strSQL = 'select @recordCount = count(*) from ' + @tblName
    
end exec sp_executesql @strSQL,N'@recordCount int out ',@recordCount outif @recordCount % @pageSize = 0
        
set @pageCount = @recordCount / @pageSize
    
else
        
set @pageCount = @recordCount / @pageSize + 1
  
--以上代码的意思是计算出记录是总数和求出总共的页数

   
begin
      
if @orderType != 0
         
begin
            
set @strTmp = '<(select min'
            
set @strOrder = ' order by ' + @fldName +' desc'
         
--如果@orderType不是0,就执行降序,这句很重要!
         end
      
else
         
begin
            
set @strTmp = '>(select max'
            
set @strOrder = ' order by ' + @fldName +' asc'
         
endif @pageIndex = 1
        
begin
           
if @strWhere != '' set @strSQL = 'select top ' + str(@pageSize+' '+@strGetFields+ ' from ' + @tblName + ' where ' + @strWhere + ' ' + @strOrder
           
elseset @strSQL = 'select top ' + str(@pageSize+' '+@strGetFields+ ' from '+ @tblName + ' '+ @strOrder
      
--如果是第一页就执行以上代码,这样会加快执行速度
        end
     
else
         
begin
           
if @strWhere != ''
                 
set @strSQL = 'select top ' + str(@pageSize+' '+@strGetFields+ ' from '
                        
+ @tblName + ' where ' + @fldName + '' + @strTmp + '('
                        
+ substring(@fldNamecharindex('.',@fldName)+1len(@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+' '+@strGetFields+ ' from '
                        
+ @tblName + ' where ' + @fldName + '' + @strTmp + '('
                        
+ substring(@fldNamecharindex('.',@fldName)+1len(@fldName)) + ') from (select top ' + str((@pageIndex-1)*@pageSize+ ' '
                        
+ @fldName + '  from ' + @tblName + '' + @strOrder + ') as tblTmp)'
                        
+ @strOrder
         
end
   
end
--print @strSQL
exec sp_executesql @strSQL
GO