但在 SQL Server 2005 之後呢?就沒有比較過了。
舉例來說,在 SQL Server 2005 ,可以使用下面的語法
select * from ( select *, ROW_NUMBER() over(order by invoicenumber) as rn from B2CInvoice ) a where a.rn between 21 and 30SQL Server 2000的語法就不說了,是很差的,而且並沒有通用的版本。
那 Oracle 呢?我現在只找到如下的方法,看起來比sql server 2005 的麻煩
SELECT * FROM ( SELECT A.*, rownum r FROM ( SELECT * FROM B2CINVOICE ORDER BY invoiceNumber ) A WHERE rownum <= 30 ) B WHERE r >= 21;注意到,下面的是沒有資料回傳的,也就是錯誤的查詢結果。雖然看起來比較直覺而且易懂
SELECT A.*, rownum r FROM ( SELECT * FROM B2CINVOICE ORDER BY invoiceNumber ) A WHERE rownum >= 21 and rownum <=30
1 則留言:
oracle這種分頁方式效能不怎好
張貼留言