SQL Server đã triển khai các mệnh đề OFFSET
và FETCH
một phần của ORDER BY
mệnh đề, như được chỉ ra bởi các câu trả lời khác và được ghi lại trong tài liệu của họ.
Mặt khác, tiêu chuẩn SQL có cả hai mệnh đề này là độc lập:
<query expression> ::=
[ <with clause> ] <query expression body>
[ <order by clause> ] [ <result offset clause> ] [ <fetch first clause> ]
Nếu ai đó muốn tính năng này được triển khai tuân thủ đầy đủ với tiêu chuẩn, họ luôn có thể yêu cầu nhóm SQL Server, thông qua kênh Connect. Trong thực tế, MS đã nhận xét - trong một yêu cầu khác về offset và tìm nạp:
Kết nối mục: SQL Denali: thêm tổng số bộ đếm vào SELECT
câu lệnh - bởi Alexey Rokhin
Trả lời: Được đăng bởi Microsoft vào ngày 24/11/2010 lúc 11:34
Yêu cầu đó OFFSET/FETCH
đòi hỏi ORDER BY
là một hạn chế trong phiên bản này. Trong tiêu chuẩn SQL ANSI (SQL: 2011) trong đó các OFFSET/FETCH
mệnh đề mới được đề xuất, ORDER BY
là tùy chọn. Hạn chế trong SQL Server phải thực hiện với giới hạn trong công nghệ trình phân tích cú pháp của chúng tôi không thể xử lý cú pháp tùy chọn mà không tạo OFFSET
từ khóa dành riêng. Chúng tôi có thể loại bỏ nó trong tương lai.
Bây giờ đối với ...
Cho đến lúc đó, nếu một người muốn sử dụng OFFSET
và FETCH
không có một cụ thể ORDER BY
, một cách giải quyết là thêm một thứ tự "không làm gì" theo mệnh đề. Thí dụ:
SELECT
...
ORDER BY (SELECT NULL)
OFFSET 0 ROWS
FETCH NEXT 1 ROWS ONLY;