最近在做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語句。