You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DBeaver 23.2.1中CTE SQL报[102]错误,MSSMS正常运行求助

SQL语法错误排查:DBeaver报错但MSSMS正常运行

问题场景

执行以下SQL代码:

with CTE1 as (
    select Col1, Col2, Col3 
    from View1
),
CTE2 as (
    select Col1 
    from View2
),
CTE3 as (
    select Col1 
    from View3
)

在DBeaver 23.2.1中收到报错:

SQL Error [102] [S0001]: Incorrect syntax near ')'.

但相同代码在MSSMS中可正常运行,报错标记指向最后一个右括号。

问题原因与解决方案

核心问题

这段代码只定义了CTE(公用表表达式),但没有后续使用这些CTE的查询语句。

SQL标准语法要求,CTE定义完成后必须跟随一个实际调用CTE的SQL语句(比如SELECT、INSERT、UPDATE或DELETE),单独定义CTE本身属于语法不完整。

为什么MSSMS能运行

MSSMS的编辑器可能对这种不完整语法有临时容错机制,允许仅定义CTE而不执行后续查询,但这并非SQL Server官方认可的规范语法。DBeaver的语法校验更贴合标准,因此会触发报错。

修正示例

在CTE定义后添加实际使用CTE的查询语句即可解决问题,比如:

with CTE1 as (
    select Col1, Col2, Col3 
    from View1
),
CTE2 as (
    select Col1 
    from View2
),
CTE3 as (
    select Col1 
    from View3
)
-- 添加实际查询语句,示例:合并三个CTE的数据
select Col1, Col2, Col3 from CTE1
union all
select Col1, null, null from CTE2
union all
select Col1, null, null from CTE3;

如果只是测试CTE定义的合法性,也可以添加简单的查询,比如:

-- 仅查询第一个CTE的数据
select * from CTE1;

内容的提问来源于stack exchange,提问作者mb14

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 09:39:56