Boh*_*ohn 7 sql t-sql sql-server sql-server-2014
为什么这不起作用,并给我一个"偏移命令附近的语法不正确"错误
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;
Run Code Online (Sandbox Code Playgroud)
我正在使用SQL Server Express 2014
Vla*_*nov 12
检查数据库兼容级别.
OFFSET
已在SQL Server 2012中添加,因此如果您的数据库处于2008兼容模式,则此关键字不可用.
在T-SQL中,您可以像这样检查:
USE AdventureWorks2012;
GO
SELECT compatibility_level
FROM sys.databases WHERE name = 'AdventureWorks2012';
GO
Run Code Online (Sandbox Code Playgroud)
以下是在不推荐使用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
Run Code Online (Sandbox Code Playgroud)
此外,Azure SQL数据仓库和并行数据仓库不支持OFFSET
子句,从该ORDER BY
子句的文档中可以看出:
Run Code Online (Sandbox Code Playgroud)-- 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 ] }
Run Code Online (Sandbox Code Playgroud)-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse [ ORDER BY { order_by_expression [ ASC | DESC ] } [ ,...n ] ]
我的问题是我试图OFFSET
在视图上使用,但没有加入。
有问题的查询:
declare @PageSize int = 25;
declare @PageNumber int = 1;
with countCte as
(
select count(*) as TotalCount from vw_viewName vn
where 1=1
)
select * from vw_viewName vn
cross join countCte cou
where 1=1
OFFSET @PageSize * (@PageNumber - 1) ROWS
FETCH NEXT @PageSize ROWS ONLY OPTION (RECOMPILE)
Run Code Online (Sandbox Code Playgroud)
添加一个order by
固定的问题:
where 1=1
order by vn.ID desc
OFFSET @PageSize * (@PageNumber - 1) ROWS
FETCH NEXT @PageSize ROWS ONLY OPTION (RECOMPILE)
Run Code Online (Sandbox Code Playgroud)