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

Reading number is top 10 articles
Discuz!,X-Space下的二级域名配置_php资料_编程技术
ASP.NET,2.0客户端回调的实现分析_[Asp.Net教程]
SQL实现其他进制到十进制的转换_[SQL Server教程]
几种个人网页里常用到的特效代码介绍_JavaScript技术_编程技术
掌握SQL四条最基本的数据操作语句_[SQL,Server教程]
使用php作linux自动执行脚本_[PHP教程]
由于未处理服务器端代码而导致,ASP.NET,页出现意外情况_[Asp.Net教程]
新手入门:IIS6环境下的PHP最佳配置方法_[PHP教程]
第三篇:使用Visual,Studio,2008实现基本的页面交互_[Asp.Net教程]
ASP.NET,2.0高级数据处理之处理控件事件_.net资料_编程技术
Reading number is top 10 pictures
各种囧况!玩游戏最不喜欢出现的十件事(点评)
美女和狗狗1
西游四格漫画(六)
9.3阅兵全景图6-常规导弹梯队和核导弹梯队
Summer is most suitable for young people to travel in China8
30 beautiful school beauty2
Female model behind the bitterness, often being overcharged4
西游四格漫画(五)
So beauty, will let you spray blood10
XuRe xuan cool and refreshing photoes1
Download software ranking
SQL2000 For 4IN1
双旗镇刀客A
matrix3
linux初级教程
尖东毒玫瑰B
Tram sex maniac 2 (H) rar bag15
apache-tomcat-6.0.33
Boxer vs Yellow1
linux高级编程
asp.netWeb服务器高级编程
归海一刀 published in(发表于) 2014/2/3 6:35:00 Edit(编辑)
SQL Server 2005下的分页SQL_[SQL Server教程]

SQL Server 2005下的分页SQL_[SQL Server教程]

SQL Server 2005下的分页SQL_[SQL Server教程]

其实基本上有三种方法:

1、使用SQL Server 2005中新增的ROW_NUMBER

几种写法分别如下:


1SELECT TOP 20 * FROM (SELECT
2 ROW_NUMBER() OVER (ORDER BY Namec) AS RowNumber,
3 *
4FROM
5 dbo.mem_member) _myResults
6WHERE
7 RowNumber > 10000
8
1SELECT * FROM (SELECT
2 ROW_NUMBER() OVER (ORDER BY Namec) AS RowNumber,
3 *
4FROM
5 dbo.mem_member) _myResults
6WHERE
7 RowNumber between 10000 and 10020
1WITH OrderedResults AS
2
3(SELECT *, ROW_NUMBER() OVER (order by Namec) as RowNumber FROM dbo.mem_member)
4
5SELECT *
6
7FROM OrderedResults
8
9WHERE RowNumber between 10000 and 10020

不管哪种写法,性能都不理想。在8,9万条数据的情况下要运行6秒左右。


2、使用临时表再加存储过程


1BEGIN
2 DECLARE @PageLowerBound int
3 DECLARE @PageUpperBound int
4
5 -- Set the page bounds
6 SET @PageLowerBound = 10000
7 SET @PageUpperBound = 10020
8
9 -- Create a temp table to store the select results
10 Create Table #PageIndex
11 (
12 [IndexId] int IDENTITY (1, 1) NOT NULL,
13 [Id] varchar(18)
14 )
15
16 -- Insert into the temp table
17 declare @SQL as nvarchar(4000)
18 SET @SQL = 'INSERT INTO #PageIndex (Id)'
19 SET @SQL = @SQL + ' SELECT'
20 SET @SQL = @SQL + ' TOP ' + convert(nvarchar, @PageUpperBound)
21 SET @SQL = @SQL + ' m_id'
22 SET @SQL = @SQL + ' FROM dbo.mem_member'
23 SET @SQL = @SQL + ' ORDER BY NameC'
24
25 -- Populate the temp table
26 exec sp_executesql @SQL
27
28 -- Return paged results
29 SELECT O.*
30 FROM
31 dbo.mem_member O,
32 #PageIndex PageIndex
33 WHERE
34 PageIndex.IndexID > @PageLowerBound
35 AND O.[m_Id] = PageIndex.[Id]
36 ORDER BY
37 PageIndex.IndexID
38
39drop table #PageIndex
40 END

而使用这种方法,在同样的情况下用时只需1秒。

看样子,row_number是个鸡肋。

3、如果觉得临时表不好,还可以使用SET ROWCOUNT


1begin
2DECLARE @first_id varchar(18), @startRow int
3
4SET ROWCOUNT 10000
5SELECT @first_id = m_id FROM mem_member ORDER BY m_id
6
7SET ROWCOUNT 20
8
9SELECT m.*
10FROM mem_member m
11WHERE m_id >= @first_id
12ORDER BY m.m_id
13
14SET ROWCOUNT 0
15end

不过,这种方法有缺点。按ID排序就快,按其他字段排序就慢。

大家有什么意见,欢迎拍砖。

参考文章:

http://www.4guysfromrolla.com/webtech/042606-1.shtml

http://www.4guysfromrolla.com/webtech/041206-1.shtml

http://www.singingeels.com/Articles/Pagination_In_SQL_Server_2005.aspx

来源:didasoft的blog







添加到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.