其實基本上有三種方法:
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排序就快,按其他字段排序就慢。
SQLServer2005下的遞迴查詢
在sqlserver2005下,遞迴查詢可以通過公共表示式 cte 來實現。如下所示 withcolumntree projectid,parentid,columnid,columnname,columnurl,ifdel,tag,clevel as select projectid,parent...
SQL Server 2005下的分頁SQL
1 使用sql server 2005中新增的row number 幾種寫法分別如下 code select top20 from select row number over order bynamec asrownumber,from dbo.mem member myresults where...
SQL Server2005複製實現
一 準備工作 1 在發布伺服器上建立乙個共享目錄,作為發布快照檔案的存放目錄。例如 在d 盤根目錄下建資料夾名為pub 2 設定sql 發布伺服器和訂閱伺服器均設定 步驟 開啟服務 控制面板 管理工具 服務 右擊sqlserver agent 屬性 登入 選擇 此帳戶 輸入或選擇第一步中建立的win...