1、使用sql server 2005中新增的row_number
幾種寫法分別如下:
code
select
top20
*from
(select
row_number()
over
(order
bynamec)
asrownumber,
*from
dbo.mem_member) _myresults
where
rownumber
>
10000
code
select
*from
(select
row_number()
over
(order
bynamec)
asrownumber,
*from
dbo.mem_member) _myresults
where
rownumber
between
10000
and10020
code
with
orderedresults as(
select
*, row_number()
over
(order
bynamec)
asrownumber
from
dbo.mem_member)
select
*from
orderedresults
where
rownumber
between
10000
and10020
不管哪種寫法,效能都不理想。在8,9萬條資料的情況下要執行6秒左右。
2、使用臨時表再加儲存過程
code
1begin
2declare
@pagelowerbound
int3
declare
@pageupperbound
int45--
set the page bounds
6set
@pagelowerbound
=10000
7set
@pageupperbound
=1002089
--create a temp table to store the select results
10create
table
#pageindex11(
12[indexid
]int
identity(1
, 1) not
null,13
[id]varchar(18
) 14)15
16--
insert into the temp table
17declare
@sql
asnvarchar
(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
26exec
sp_executesql
@sql
2728
--return paged results
29selecto.*
30from
31dbo.mem_member o,
32#pageindex pageindex
33where
34pageindex.indexid
>
@pagelowerbound
35ando.[
m_id]=
pageindex.[id
]36order
by37
pageindex.indexid
3839
drop
table
#pageindex
40end
而使用這種方法,在同樣的情況下用時只需1秒。
看樣子,row_number是個雞肋。
3、如果覺得臨時表不好,還可以使用set rowcount
不過,這種方法有缺點。按id排序就快,按其他字段排序就慢。
code
begin
declare
@first_id
varchar(18
), @startrow
intset
rowcount
10000
select
@first_id
=m_id
from
mem_member
order
bym_id
setrowcount
20selectm.*
from
mem_member m
where
m_id
>=
@first_id
order
bym.m_id
setrowcount
0end
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 幾種寫法分別如下 1select top 20 from select 2 row number over order by namec as rownumber,3 4from 5 dbo.mem membe...
SQL Server2005複製實現
一 準備工作 1 在發布伺服器上建立乙個共享目錄,作為發布快照檔案的存放目錄。例如 在d 盤根目錄下建資料夾名為pub 2 設定sql 發布伺服器和訂閱伺服器均設定 步驟 開啟服務 控制面板 管理工具 服務 右擊sqlserver agent 屬性 登入 選擇 此帳戶 輸入或選擇第一步中建立的win...