SQL Server 2005下的分頁SQL

2021-09-25 06:24:55 字數 2690 閱讀 6875

其實基本上有三種方法:

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