SQL Server telah mengimplementasikan OFFSET
dan FETCH
klausa sebagai bagian dari ORDER BY
klausa, seperti yang ditunjukkan oleh jawaban lain dan didokumentasikan dalam dokumentasi mereka.
Standar SQL di sisi lain, memiliki kedua klausa ini sebagai independen:
<query expression> ::=
[ <with clause> ] <query expression body>
[ <order by clause> ] [ <result offset clause> ] [ <fetch first clause> ]
Jika seseorang ingin fitur ini diterapkan sepenuhnya sesuai dengan standar, mereka selalu dapat membuat permintaan ke tim SQL Server, melalui saluran Connect. Bahkan, MS telah berkomentar - dalam permintaan berbeda tentang offset dan pengambilan:
Hubungkan item: SQL Denali: tambahkan penghitung baris total ke SELECT
pernyataan - oleh Alexey Rokhin
Jawaban: Diposting oleh Microsoft pada 24/11/2010 pada 11:34
Persyaratan yang OFFSET/FETCH
mensyaratkan ORDER BY
adalah batasan dalam rilis ini. Dalam standar SQL ANSI (SQL: 2011) di mana OFFSET/FETCH
klausa baru diusulkan, ORDER BY
adalah opsional. Pembatasan dalam SQL Server berkaitan dengan keterbatasan dalam teknologi parser kami yang tidak dapat menangani sintaks opsional tanpa membuat OFFSET
kata kunci yang dipesan. Kami dapat menghapusnya di masa mendatang.
Sekarang sehubungan dengan ...
Sampai saat itu, jika seseorang ingin menggunakan OFFSET
dan FETCH
tanpa spesifik ORDER BY
, solusinya adalah menambahkan perintah "tidak melakukan apa pun" dengan klausa. Contoh:
SELECT
...
ORDER BY (SELECT NULL)
OFFSET 0 ROWS
FETCH NEXT 1 ROWS ONLY;