web-dev-qa-db-ja.com

OFFSETコマンドの近くの構文が正しくありません

これが機能せず、「オフセットコマンドに近い構文が正しくありません」というエラーが表示される理由

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を使用しています

8
Bohn

データベースの互換性レベルを確認してください。 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 ]   
]
12