All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
[C#]StringWriter实现的一个功能_[Asp.Net教程]
javascript代码格式化和语法着色_JavaScript技术_编程技术
PHP实例:PHP实现上传文件生成小图加文字的实例_[PHP教程]
ASP.NET技巧:DataGrid的多行提交_[Asp.Net教程]
SQL数据操作基础(初级)3_mssql学习_编程技术
ASP.NET,2.0,里输出文本格式流_[Asp.Net教程]
Ajax的缺点_[AJAX教程]
三步堵死SQL注入漏洞_[SQL,Server教程]
十一 Span和Div_[Html教程]
php5.0升级5.2全过程_php资料_编程技术
Reading number is top 10 pictures
每天进步一点点
A man's favorite things15
世界各国15岁的MM有什么不同
Catch prostitution woman in China
到底是谁撞谁呀?
China's programmers are live what kind, had a look at will know that
Chinese paper-cut grilles art appreciation1
美女就是美女
西游四格漫画(一)
修电脑也有这么漂亮的美女
Download software ranking
Professional killers2 for Android
Boxer's Top ten classic battle10
美女写真2
Unix video tutorial13
Photoshop 8.0图象编辑软件
The hero
linux安装大全
VC++6.0培训教程
Red cliff
apache-tomcat-6.0.33
归海一刀 published in(发表于) 2014/2/3 6:35:32 Edit(编辑)
SQL Server 存储过程的经典分页_[SQL Server教程]

SQL Server 存储过程的经典分页_[SQL Server教程]

SQL Server 存储过程的经典分页_[SQL Server教程]

建立表:


CREATE TABLE [TestTable] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[FirstName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[LastName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[Country] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Note] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO



插入数据:(2万条,用更多的数据测试会明显一些)
SET IDENTITY_INSERT TestTable ON


declare @i int
set @i=1
while @i<=20000
begin
insert into TestTable([id], FirstName, LastName, Country,Note) values(@i, ''FirstName_XXX'',''LastName_XXX'',''Country_XXX'',''Note_XXX'')
set @i=@i+1
end


SET IDENTITY_INSERT TestTable OFF



-------------------------------------


分页方案一:(利用Not In和SELECT TOP分页)
语句形式:
SELECT TOP 10 *
FROM TestTable
WHERE (ID NOT IN
(SELECT TOP 20 id
FROM TestTable
ORDER BY id))
ORDER BY ID



SELECT TOP 页大小 *
FROM TestTable
WHERE (ID NOT IN
(SELECT TOP 页大小*页数 id
FROM 表
ORDER BY id))
ORDER BY ID


-------------------------------------


分页方案二:(利用ID大于多少和SELECT TOP分页)
语句形式:
SELECT TOP 10 *
FROM TestTable
WHERE (ID >
(SELECT MAX(id)
FROM (SELECT TOP 20 id
FROM TestTable
ORDER BY id) AS T))
ORDER BY ID



SELECT TOP 页大小 *
FROM TestTable
WHERE (ID >
(SELECT MAX(id)
FROM (SELECT TOP 页大小*页数 id
FROM 表
ORDER BY id) AS T))
ORDER BY ID


-------------------------------------


分页方案三:(利用SQL的游标存储过程分页)
create procedure XiaoZhengGe
@sqlstr nvarchar(4000), --查询字符串
@currentpage int, --第N页
@pagesize int --每页行数
as
set nocount on
declare @P1 int, --P1是游标的id
@rowcount int
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select ceiling(1.0*@rowcount/@pagesize) as 总页数--,@rowcount as 总行数,@currentpage as 当前页
set @currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@currentpage,@pagesize
exec sp_cursorclose @P1
set nocount off


其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。
建议优化的时候,加上主键和索引,查询效率会提高。


通过SQL 查询分析器,显示比较:我的结论是:
分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句
分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句
分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用


在实际情况中,要具体分析。







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.