天天看點

SQLServer的一種分頁寫法

最近在做SQLServer的分頁寫法,參考了很多方法。下面是我總結的一種分頁方法,用了with,top和row_number()函數。

下面是我寫的分頁SQL語句:

1:with query as (select top 100 percent *,row_number() over(order by ID) as rownum)

from tablename)select * from query where rownum between 10 and 100;

2:with query as (select  *,row_number() over(order by ID) as rownum)

from tablename)select * from query where rownum > 10 and rownum <100;

with的用法和相關文法内容請參考相關資料,再次不叙述。

1)、在上面兩條SQL語句中query是自定義的表名,可以任意寫;

2)、row_number()函數是建立一個類似與oracle的rownum列,但隻支援2005或更高的版本;除此之row_number()後面必須跟上over(),在over後面的括号中還得寫上order by ,而ID是你所查詢的表的某一列,最好用主鍵。在此我将row_number()這個重新命名為rownum;

3)、在as後面的括号内用了一條SQL語句,裡面可以用top關鍵字做相關的分頁也可以不用,在第一句SQL語句中的top後面寫上了100 percent,這個可以不寫如第二條SQL語句一樣,同時這裡也可以寫上具體的數字。其實這裡就是top關鍵字的用法。因為我們已經将查出來的資料放到query表中,其中有一列為rownum,是唯一的。

4)、括号後面的SQL語句是表示:從query表中查詢資料,并可以附上條件,查出我們需要的範圍。這裡可以用between and,或者直接用rownum大于和小于一個數值。

5)、select top 100 percent *,row_number() over(order by ID) as rownum和select  *,row_number() over(order by ID) as rownum是上面的SQL語句的子句。SQL語句先運作這子句再運作外面的SQL語句。