为什么这不起作用,并给我一个“不正确的语法接近偏移量命令”错误
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
发布于 2017-02-16 11:30:04
检查数据库兼容级别。OFFSET是在SQL Server2012中添加的,因此如果您的数据库处于2008兼容模式,则此关键字不可用。
View or Change the Compatibility Level of a Database
在T-SQL中,您可以这样检查它:
USE AdventureWorks2012;
GO
SELECT compatibility_level
FROM sys.databases WHERE name = 'AdventureWorks2012';
GO下面是取自How to check SQL Server Database compatibility after sp_dbcmptlevel is deprecated?的兼容级别列表
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数据仓库和并行数据仓库不支持OFFSET子句,从ORDER BY子句的文档中可以看出:
-- SQL Server和Azure SQL数据库的语法ORDER BY order_by_expression COLLATE collation_name,...n ::= { OFFSET {integer_constant | offset_row_count_expression }{ ROW | ROWS } FETCH { FIRST | NEXT }{ integer_constant | fetch_row_count_expression }{ ROW | ROWS }}
-- Azure SQL数据仓库和并行数据仓库的语法[ ORDER BY { order_by_expression ASC | DESC },...n ]
发布于 2019-12-18 23:08:29
我的问题是我试图在一个视图上使用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)添加order by解决了此问题:
where 1=1
order by vn.ID desc
OFFSET @PageSize * (@PageNumber - 1) ROWS
FETCH NEXT @PageSize ROWS ONLY OPTION (RECOMPILE)发布于 2022-02-23 09:45:45
要添加此错误的可能常见原因(尽管不是OP情况),请执行以下操作:
缺少ORDER BY子句。
https://stackoverflow.com/questions/42263984
复制相似问题