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

推荐订阅源

博客园_首页
博客园 - 【当耐特】
博客园 - 叶小钗
阮一峰的网络日志
阮一峰的网络日志
WordPress大学
WordPress大学
D
Docker
T
The Blog of Author Tim Ferriss
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Azure Blog
Microsoft Azure Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
M
MIT News - Artificial intelligence
H
Hackread – Cybersecurity News, Data Breaches, AI and More
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
云风的 BLOG
云风的 BLOG
F
Fortinet All Blogs
罗磊的独立博客
小众软件
小众软件
A
About on SuperTechFans
MyScale Blog
MyScale Blog
D
DataBreaches.Net
The GitHub Blog
The GitHub Blog
C
Check Point Blog
L
LangChain Blog

博客园 - JoyBin

使用CSS为图片添加更多趣味的5种方法. IT工作者要保护自己的头发啊.. document.execCommand()用法说明 用三层架构与设计模式思想部署企业级数据库业务系统开发(转) C#代码与javaScript函数的相互调用 IE6 png 透明 (三种解决方法)(转) - JoyBin 程序人生就像一场恶梦。 常用正则表达式 [转载]Meta标签详解 三级联动-完美版 - JoyBin - 博客园 asp.net(C#)服务器绝对路径转换成URL相对路径[修改] (转) flash的菜单与asp.net进行交互(转) 把生成的缩略图存到数据库中 添加html内容(insertAdjacentHTML和insertAdjacentText) 母版页判断登陆 及 母版页与内容页的执行顺序 常用.net代码 常用JS代码 WMPLib.WindowsMediaPlayer 的用法 网页播放器 PlayState 的用法
SQLServer存储过程分页
JoyBin · 2008-03-08 · via 博客园 - JoyBin


【摘要】
这个存储过程的功能比较强大,用在项目中非常的适用,尤其是在百万级数据上。

【全文】

SQL代码

CREATE PROCEDURE prcPageResult    
-- 获得某一页的数据 --    
@currPage int = 1,                                    --当前页页码 (即Top currPage)    
@showColumn varchar(2000= '*',           --需要得到的字段 (即 column1,column2,)    
@tabName varchar(2000),                           --需要查看的表名 (即 from table_name)    
@strCondition varchar(2000= '',              --查询条件 (即 where condition) 不用加where关键字    
@ascColumn varchar(100= '',                 --排序的字段名 (即 order by column asc/desc)    
@bitOrderType bit = 0,                            --排序的类型 (0为升序,1为降序)    
@pkColumn varchar(50= '',                   --主键名称    
@pageSize int = 20                                --分页大小    
   
AS   
BEGIN -- 存储过程开始    
--
 该存储过程需要用到的几个变量 --    
DECLARE @strTemp varchar(1000)    
DECLARE @strSql varchar(4000)                   --该存储过程最后执行的语句    
DECLARE @strOrderType varchar(1000)      --排序类型语句 (order by column asc或者order by column desc)    
   
BEGIN   
IF @bitOrderType = 1   -- bitOrderType=1即执行降序    
BEGIN   
    
SET @strOrderType = ' ORDER BY '+@ascColumn+' DESC'   
    
SET @strTemp = '<(SELECT min'   
END   
ELSE   
BEGIN   
    
SET @strOrderType = ' ORDER BY '+@ascColumn+' ASC'   
    
SET @strTemp = '>(SELECT max'   
END   
   
IF @currPage = 1    -- 如果是第一页    
BEGIN   
    
IF @strCondition != ''   
        
SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+    
            
' WHERE '+@strCondition+@strOrderType    
    
ELSE   
        
SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+@strOrderType    
END   
   
ELSE    -- 其他页    
BEGIN   
    
IF @strCondition !=''   
        
SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+    
        
' WHERE '+@strCondition+' AND '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currPage-1)*@pageSize)+    
        
' '+@pkColumn+' FROM '+@tabName+@strOrderType+') AS TabTemp)'+@strOrderType    
    
ELSE   
        
SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+    
        
' WHERE '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currPage-1)*@pageSize)+' '+@pkColumn+    
        
' FROM '+@tabName+@strOrderType+') AS TabTemp)'+@strOrderType    
END   
   
END   
EXEC (@strSql)    
END  -- 存储过程结束    
--
----------------------------------------------    
GO    
 调用方法:

prcPageResult 
1,'*','TableName','','CreateDate',1,'PkID',25

 上面表示,查询表TableName的所有字段,前25条记录,因为是第一页,排序字段为CreateDate,降序排列,主键是PkID。

@tabName2 varchar(2000),                     --第二个子查询的表名------------(更改处:由于查询条件关系,从而使tabName是两个表,这样第二个子查询也会用上这两张表..导致错误..)

可将有条件查询的第二个Top查询里的tabName改成tabName2,,