天天看點

SQL 在查詢中插入行号--自定義分頁的另外一種實作方式

如何在SQL中對行進行動态編号

<a href="http://https//dream4ever.org/index.php?" target="_blank">DreamLand</a>

    如何在SQL中對行進行動态編号,加行号這個問題,在資料庫查詢中,是經典的問題.

    我把現在的方法整理一下,分享一下技巧吧

    代碼基于pubs樣闆資料庫

    在SQL中,一般就這兩種方法.

    1.使用臨時表

    可以使用select into 建立臨時表,在第一列,加入Identify(int,1,1)作為行号,

    這樣在産生的臨時表中,結果集就有了行号.也是目前效率最高的方法.

    這種方法不能用于視圖

    代碼:

SQL 在查詢中插入行号--自定義分頁的另外一種實作方式

 set nocount on

SQL 在查詢中插入行号--自定義分頁的另外一種實作方式

    select IDentify(int,1,1) 'RowOrder',au_lname,au_fname into #tmp from authors

SQL 在查詢中插入行号--自定義分頁的另外一種實作方式

    select * frm #tmp

SQL 在查詢中插入行号--自定義分頁的另外一種實作方式

    drop table #tmp

SQL 在查詢中插入行号--自定義分頁的另外一種實作方式

    2.使用自連接配接

    不用臨時表,在SQL語句中,動态的進行排序.這種方法用到的連接配接是自連接配接,連接配接關系一般是

    大于,

    代碼

SQL 在查詢中插入行号--自定義分頁的另外一種實作方式

select rank=count(*), a1.au_lname, a1.au_fname

SQL 在查詢中插入行号--自定義分頁的另外一種實作方式

    from authors a1 inner join authors a2 on a1.au_lname + a1.au_fname &gt;= a2.au_lname + a2.au_fname

SQL 在查詢中插入行号--自定義分頁的另外一種實作方式

    group by a1.au_lname, a1.au_fname

SQL 在查詢中插入行号--自定義分頁的另外一種實作方式

    order by count(*)

SQL 在查詢中插入行号--自定義分頁的另外一種實作方式

    運作結果:

    rank au_lname au_fname 

    ----------- ---------------------------------------- -------------------- 

    1 Bennet Abraham

    2 Blotchet-Halls Reginald

    3 Carson Cheryl

    4 DeFrance Michel

    5 del Castillo Innes

    6 Dull Ann

    7 Greene Morningstar

    ... ....

    缺點:

    1.使用自聯接,是以該方法不适用于處理大量行。它适用于處理幾百行。

    對于大型表,一定要使用索引以避免進行大範圍的搜尋,或用第一種方法.

    2.不能正常處理重複值。當比較重複值時,會出現不連續的行編号。

    如果不希望出現這種現象,可以在電子表格中插入結果時隐藏排序列,而是使用電子表格編号。

    或用第一種方法

    優點:

    1.這些查詢可以用于視圖和結果格式設定中

在結果集中插入了行号,現在就可以将結果集合緩存起來,然後使用DataView,加入過濾條件

RowNum&gt;PageIndex*PageSize And RowNum&lt;=(PageIndex+1)*PageSize

就能實作快速的分頁,而且不論你的頁面資料綁定控件是什麼(DataList,DataGrid,還是Repeate都可以)。

如果你使用的是DataGrid,那麼建議不要使用這種技術。因為DataGrid的分頁效率和它差不多。

本文轉自斯克迪亞部落格園部落格,原文連結:http://www.cnblogs.com/sgsoft/archive/2004/11/11/62591.html,如需轉載請自行聯系原作者