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

推荐订阅源

Stack Overflow Blog
Stack Overflow Blog
WordPress大学
WordPress大学
罗磊的独立博客
S
Secure Thoughts
Schneier on Security
Schneier on Security
博客园 - Franky
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
爱范儿
爱范儿
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hacker News: Ask HN
Hacker News: Ask HN
PCI Perspectives
PCI Perspectives
Google DeepMind News
Google DeepMind News
S
Security Affairs
SecWiki News
SecWiki News
博客园 - 聂微东
Security Archives - TechRepublic
Security Archives - TechRepublic
Google Online Security Blog
Google Online Security Blog
H
Heimdal Security Blog
S
Security @ Cisco Blogs
Engineering at Meta
Engineering at Meta
C
CXSECURITY Database RSS Feed - CXSecurity.com
Cloudbric
Cloudbric
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
V
Visual Studio Blog
P
Proofpoint News Feed
Project Zero
Project Zero
T
Threat Research - Cisco Blogs
Webroot Blog
Webroot Blog
Blog — PlanetScale
Blog — PlanetScale
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
W
WeLiveSecurity
Last Week in AI
Last Week in AI
月光博客
月光博客
Microsoft Azure Blog
Microsoft Azure Blog
M
MIT News - Artificial intelligence
有赞技术团队
有赞技术团队
S
Securelist
GbyAI
GbyAI
Application and Cybersecurity Blog
Application and Cybersecurity Blog
C
CERT Recently Published Vulnerability Notes
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Cyberwarzone
Cyberwarzone
B
Blog RSS Feed
P
Palo Alto Networks Blog
H
Hacker News: Front Page
D
Docker
雷峰网
雷峰网
Latest news
Latest news
Microsoft Security Blog
Microsoft Security Blog

博客园 - 亦心

教你如何查找并下载某手某音上的外部视频 求出两个字符串中最大长度的相同的子字符串 年会抽奖软件 正则表达式+编码转换小工具 sql语句跨库导入导出 Google maps API开发(二) - 亦心 Google maps API开发(一) - 亦心 Javascript树型菜单(含源码) Javascript结合XML省市级联 - 亦心 - 博客园 ASP.NET程序读取二代身份证(附源码) - 亦心 - 博客园 仿百度搜索智能提示(纯JS实现) 发现一个免费申请国际域名的地方!! asp.net性能优化 利用反射实现通用的DataReader转List、DataReader转实体类 任意类型转换成json tsql字符串操作 javascript正则表达式 - 亦心 - 博客园 access、excel取随机n条记录 测试SQL Server执行时间和CPU时间
分享一个分页存储过程和分页函数
亦心 · 2010-01-14 · via 博客园 - 亦心

分页存储过程

代码

Create PROCEDURE [dbo].[GetRecordWithPage]
@fieldsType nvarchar(1000),   --字段列表(带类型),用于@t表变量的字段声明,如:PhotoID int,UserID int,PhotoTitle nvarchar(50)
@fieldsList nvarchar(500),    --字段列表(不带类型),用于分页部分读取@t表变量的字段,也可使用*代替,但性能会下降,如:PhotoID ,UserID ,PhotoTitle
@selectSrting nvarchar(2000), --向@t表变量中读取记录的Select语句
@resultOrderBy nvarchar(200), --对分页结果进行排序的字段,如:升序'PhotoID ASC'、降序'PhotoID DESC',注意:如果是降序的话要在selectSrting和此处都加DESC
@pageSize INT,                --页尺寸,0表示返回所有行
@currentPage INT,             --当前页,首页为1
@RecordCount INT OUTPUT       --非0值则返回记录总数
AS
BEGIN
    
DECLARE @strSql varchar(4000)
    
declare @sql nvarchar(1000)
    
SET @strSql = 'DECLARE @t TABLE(' +@fieldsType+ ');'
    
SET @strSql = @strSql + 'INSERT INTO @t '+@selectSrting+ ';'
    
set @sql = @strSql + 'select @aa=count(*) from @t;' 
    
exec sp_executesql @sql,N'@aa int output',@RecordCount OUTPUT;
    
IF @pageSize=0
        
SET @strSql=@strSql+'SELECT '+@fieldsList+' FROM @t;'
    
ELSE
        
IF @currentPage=1
            
SET @strSql=@strSql+'select TOP('+STR(@pageSize)+')'+@fieldsList+' FROM @t;'
        
ELSE
            
BEGIN
                
SET @strSql =@strSql+'SELECT TOP('+Str(@pageSize)+')'+ @fieldsList+'FROM (SELECT TOP('+Str(@pageSize * @currentPage)+')'+@fieldsList+' , ROW_NUMBER() OVER (ORDER BY '+@resultOrderBy+')'
                
SET @strSql =@strSql+' AS RowNumber FROM @t'
                
SET @strSql =@strSql+') AS r WHERE r.RowNumber >' + Str(@pageSize * (@currentPage - 1))+';'
            
END
    
EXEC(@strSql)
END

分页函数:

代码

Create Function [dbo].[F_ConformationPage]
(  
@pageNum int--页码
@pageSize int,--页面大小
@orderExpression nvarchar(50),--排序表达式如:'ID DESC'
@oldSql nvarchar(max--待分页的sql语句

RETURNS  Nvarchar(max)  --待分页sql语句
 AS       
begin
 
declare @newSql Nvarchar(max)  
set @newSql=''declare @beginPage as  nvarchar(100--开始数字
set    @beginPage=(@pageNum*@pageSize)-(@pageSize-1)
declare  @endPage nvarchar(100)
set @endPage=@beginPage+@pageSize-1
set @newSql='select * from (
SELECT Row_Number( ) over( ORDER BY 
'+ @orderExpression +') as rowNum,* from ('+@oldSql+') as aa) as yy
where rowNum BETWEEN 
'+ @beginPage+' and '+@endPage+' order by '+ @orderExpressionreturn  @newSql
end

每天进步一点点...