sqlserver2005不支援關鍵字limit ,所以它的分頁sql查詢語句將不能用mysql的方式進行,幸好sqlserver2005提供了top,rownumber等關鍵字,這樣就能通過這幾個關鍵字實現分頁。
下面是本人在網上查閱到的幾種查詢指令碼的寫法:
幾種sqlserver2005高效分頁sql查詢語句
top方案:
sql codeselect top 10 * from table1
where id not in(select top 開始的位置 id from table1)
max:
sql codeselect top 10 * from table1
where id>(select max(id)
from (select top 開始位置 id from table1order by id)tt)
row:
sql codeselect *
from (
select row_number()over(order by tempcolumn)temprownumber,*
from (select top 開始位置+10 tempcolumn=0,* from table1)t
)ttwhere temprownumber>開始位置
3種分頁方式,分別是max方案,top方案,row方案
效率:第1:row
第2:max
第3:top
缺點:max:必須使用者編寫複雜sql,不支援非唯一列排序
top:必須使用者編寫複雜sql,不支援復合主鍵
row:不支援sqlserver2000
測試資料:
共320萬條資料,每頁顯示10條資料,分別測試了2萬頁、15萬頁和32萬頁。
頁碼,top方案,max方案,row方案
2萬,60ms,46ms,33ms
15萬,453ms,343ms,310ms
32萬,953ms,720ms,686ms
是一種通過程式拼接sql語句的分頁方案,
使用者提過的sql語句不需要編寫複雜的sql邏輯
諾使用者提供sql如下
sql code
select * from table1
從第5條開始,查詢5條,處理後sql變為
sql code
select *
from (
select row_number()over(order by tempcolumn)temprownumber,*
from (select top 10 tempcolumn=0,* from table1)t
)ttwhere temprownumber>5
這是什麼意思呢?分解一下
首先將使用者輸入的sql語句轉稍稍修改
在select後新增top 開始位置+條數變成
再外加一列tempcolum,變成這樣
sql code
select top 20 tempcolumn=0,* from clazz
巢狀一層,這樣便可查詢出行號
剛才那個列就是用來這裡order by用的
(也不知道sqlserver的row_number函式為什麼必須要order by)
sql code
select row_number()over(order by tempcolumn)temprownumber,*
from (修改過的查詢)t
再套一層,過濾掉行號小於開始位置的行
sql code
select * from (第二層)tt
where temprownumber>10
SqlServer2005分頁方案
插入測試資料200w條,可能會很久 create table student id int primary keyidentity 1 1 name nvarchar 50 age int insert student name,age values name 18 while select cou...
SQL Server 2005 分頁儲存過程
支援 多表連線查詢 group by分組查詢等。多表連線查詢時請指定字段,不要用select 返回為一結果集,有乙個輸出引數為記錄總數,配合 aspnetpager控制項使用絕配。create procedure web pager rowstotal intoutput,輸出記錄總數 tablen...
sqlserver2005 分頁 SQL語句
1.分頁方案一 利用not in和select top分頁 語句形式 select top 10 from testtable where id not in select top20id from testtable order by id order by id select top 頁大小 f...