Sybase 8(舊版)取得rownum或分頁時使用sql語法

Sybase並沒有像mysql的limit方法,也沒有Oracle的rownum可以用,要做出分頁或RowNum並不是十分容易,在網路上找了很多資料,大概的做法都差不多,主要都是先把原先的表格排序後給於編號,並存入一個暫存的table裡,再利用這個table去Select出要的範圍的資料,不過如果資料量十分驚人時是否還可以用呢?最少比直接把資料回傳至前端再來跑for loop快。

底下提供一個利用join方式來刮掉不需要的範圍:

select key1,key2, rownum = identity(8) into #foo from mytable
select * from mytable  b
join #foo a on b.key1 = a.key1 and a.key2 = b.key2
where a.rownum between 3 and 5
drop table #foo

其中key1,key2是primary key,pk值,可以是int數字、varchar文字等,也可以是複合pk

mytabe是想要查詢的table名稱

#foo是暫存的表格名稱

用完要drop table掉,以免暫存檔佔用記憶體空間

發表迴響