sqlserver2005不支援關鍵字limit ,所以它的分頁sql查詢語句將不能用mysql的方式進行,幸好sqlserver2005提供了top,rownumber等關鍵字,這樣就能通過這幾個關鍵字實現分頁。
幾種sqlserver2005高效分頁sql查詢語句
top方案:
select top 10 * from table1
where id not in(select top 開始的位置 id from table1)
select top 10 * from table1
where id>(select max(id)
from (select top 開始位置 id from table1order by id)tt)
row:
select * from (
select row_number()over(order by tempcolumn)temprownumber,*
from (select top 開始位置+10 tempcolumn=0,* from table1)t
)tt where 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如下
select * from table1
從第5條開始,查詢5條,處理後sql變為
select * from (
select row_number()over(order by tempcolumn)temprownumber,*
from (select top 10 tempcolumn=0,* from table1)t
)tt where temprownumber>5
這是什麼意思呢?分解一下
首先將使用者輸入的sql語句轉稍稍修改
在select後新增top 開始位置+條數變成
再外加一列tempcolum,變成這樣
select top 20 tempcolumn=0,* from clazz
select row_number()over(order by tempcolumn)temprownumber,*
from (修改過的查詢)t
再套一層,過濾掉行號小於開始位置的行
select * from (第二層)tt where temprownumber>10
SQL Server2005複製實現
一 準備工作 1 在發布伺服器上建立乙個共享目錄,作為發布快照檔案的存放目錄。例如 在d 盤根目錄下建資料夾名為pub 2 設定sql 發布伺服器和訂閱伺服器均設定 步驟 開啟服務 控制面板 管理工具 服務 右擊sqlserver agent 屬性 登入 選擇 此帳戶 輸入或選擇第一步中建立的win...
SQL Server 2005完全解除安裝
sql server 2005的解除安裝是乙個非常頭疼的問題。我曾經嘗試過直接使用 新增或刪除程式 工具解除安裝 清除安裝目錄 刪除登錄檔內容等等各種方式綜合解除安裝,勉強成功。現在終於找到了乙個事半功倍的方法,多次嘗試,未有失敗,具體如下 第一種是微軟官方提供的工具 msicuu2.exe 微軟官...
SQLSERVER 2005 遞迴查詢
專案中有使用者組表usergroup如下 其中pid表示當前組的上級組 表資料如下 現在想查詢出頂級組 沒有上級組叫頂級組 a1組的所有子孫組id,sql如下 查詢子節點 with rtd1 as select id pid from usergroup rtd2 as select from rt...