SQL Server 2005下的分頁SQL

2022-02-04 13:34:02 字數 2933 閱讀 1754

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...