残念ながら、クエリによって返される行の範囲を制限する方法は、DBMSごとに異なります。OracleはROWNUMを使用しますが(ocdecioの回答を参照)、ROWNUMはSQLServerでは機能しません。
おそらく、これらの違いを、特定のSQLステートメントと最初と最後の行番号を受け取り、ターゲットDBMSに適切なpaginatd SQLを生成する関数でカプセル化できます(例:
)。sql = paginated ('select empno, ename from emp where job = ?', 101, 150)
戻るだろう
'select * from (select v.*, ROWNUM rn from ('
+ theSql
+ ') v where rownum < 150) where rn >= 101'
Oracleの場合とSQLServerの場合。
ただし、Oracleソリューションでは、処理する必要のある結果に新しい列RNが追加されていることに注意してください。