これが機能せず、「オフセットコマンドに近い構文が正しくありません」というエラーが表示される理由
SELECT o.orderdate, o.orderid, o.empid, o.custid FROM Sales.Orders o
ORDER BY o.orderdate, o.orderid
OFFSET 50 ROWS
FETCH NEXT 25 ROWS ONLY;
SQL Server Express2014を使用しています
データベースの互換性レベルを確認してください。 OFFSET
はSQL Server 2012で追加されたため、データベースが2008互換モードの場合、このキーワードは使用できません。
T-SQLでは、次のように確認できます。
USE AdventureWorks2012;
GO
SELECT compatibility_level
FROM sys.databases WHERE name = 'AdventureWorks2012';
GO
sp_dbcmptlevelが非推奨になった後にSQL Serverデータベースの互換性を確認する方法 から取得した互換性レベルのリストを次に示します。
65 - SQL Server 6.5
70 - SQL Server 7.0
80 - SQL Server 2000
90 - SQL Server 2005
100 - SQL Server 2008/R2
110 - SQL Server 2012
120 - SQL Server 2014
130 - SQL Server 2016
140 - SQL Server 2017
さらに、Azure SQL DataWarehouseとParallelData Warehouseは、 ORDER BY
句のドキュメントからわかるように、OFFSET
句をサポートしていません。
-- Syntax for SQL Server and Azure SQL Database ORDER BY order_by_expression [ COLLATE collation_name ] [ ASC | DESC ] [ ,...n ] [ <offset_fetch> ] <offset_fetch> ::= { OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS } [ FETCH { FIRST | NEXT } {integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY ] }
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse [ ORDER BY { order_by_expression [ ASC | DESC ] } [ ,...n ] ]