SQL Server 2022中WITH子句与LAG函数语法错误求助
SQL Server 2022 CTE语法错误排查
问题详情
使用SQL Server 2022(数据库兼容级别160)执行以下CTE语句时触发语法错误:
WITH CTE AS ( SELECT Id, LAG(Id) OVER (ORDER BY Id) AS previous_id, Date, LAG(Date) OVER (ORDER BY Id) AS previous_date FROM dbo.Bellabeat_daily )
错误提示:
Msg 102, Level 15, State 1, Line 6
Incorrect syntax near ')'.
错误指向FROM dbo.Bellabeat_daily所在行,已确认列名和表名无误,需要排查方向。
排查建议
- 补充CTE后续查询语句:CTE仅为临时结果集的定义,必须在其后紧跟使用该CTE的查询逻辑(例如
SELECT * FROM CTE),不能单独定义CTE就终止语句,这是此类错误最常见的原因。 - 清除特殊字符:检查
FROM行及前后是否存在不可见的特殊字符(如全角空格、异常制表符),可尝试手动重新输入该行代码,避免复制粘贴带入的隐藏字符干扰语法解析。 - 处理关键字冲突:
Date是SQL Server保留关键字,若实际代码中未用方括号包裹,尝试修改为[Date],避免关键字解析异常。 - 确认兼容级别生效:执行以下语句验证数据库兼容级别是否确实为160:
SELECT name, compatibility_level FROM sys.databases WHERE name = '你的数据库名称';
内容的提问来源于stack exchange,提问作者Alvaro C
相关产品推荐
相关产品推荐

