Неверный синтаксис рядом с командой 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 Express 2014

1 ответов


проверьте уровень совместимости базы данных. OFFSET был добавлен в SQL Server 2012, поэтому, если ваша база данных находится в режиме совместимости 2008, это ключевое слово недоступно.

просмотр или изменение уровня совместимости базы данных

в T-SQL вы можете проверить это следующим образом:

 USE AdventureWorks2012;  
 GO  

 SELECT compatibility_level  
 FROM sys.databases WHERE name = 'AdventureWorks2012';  
 GO

вот список уровней совместимости, взятых из как проверить совместимость базы данных SQL Server после sp_dbcmptlevel нерекомендуемый?:

 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

кроме того, хранилище данных SQL Azure и параллельное хранилище данных не поддерживают OFFSET статья, Как видно из документов ORDER BY статья:

-- 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 ]   
]