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

DBeaver中SQL Server MERGE语句分号语法错误排查求助

DBeaver中SQL Server脚本分号语法错误排查与解决

问题现象

接手的大型SQL Server存储过程在DBeaver中运行时,反复出现“;”附近语法错误:删一个分号仍报错,删两个分号又提示“MERGE语句必须以分号结尾”,但脚本在其他环境可正常运行。

核心原因

问题出在DBeaver对SQL Server语句分隔符的处理逻辑上——SQL Server原生用GO作为批处理分隔符,而DBeaver默认可能将分号识别为批处理分隔符,导致脚本解析混乱。

解决方法

1. 修改DBeaver连接的语句分隔符设置

  • 找到对应的SQL Server连接,右键选择「编辑连接」→「驱动属性」
  • 找到sql.query.separator选项,将其值改为GO(默认可能是分号)
  • 保存设置后重新运行脚本

2. 调整脚本的批处理分隔方式

在MERGE语句和WITH语句之间添加GO,明确拆分两个批处理,同时修正MERGE语句里的多余逗号:

MERGE rds.DimAuthorizers AS trgt
USING #TmpAuthorizers AS src
    ON trgt.AuthOrgID = src.AuthOrgID
    AND ISNULL(trgt.StartTime, '') = ISNULL(src.StartTime, '')
WHEN MATCHED THEN UPDATE
    SET trgt.AuthOrgName = src.AuthOrgName
WHEN NOT MATCHED BY TARGET THEN
    INSERT (AuthOrgName)
    VALUES (src.AuthOrgName);
GO
WITH upd AS
(
    SELECT 
        AuthOrgID
        , StartTime
        , min(endd.StartTime) - 1 AS EndTime 
    FROM rds.DimAuthorizers startd
    JOIN rds.DimAuthorizers endd
        ON startd.AuthOrgID = endd.AuthOrgID
        AND startd.StartTime < endd.StartTime
    GROUP BY startd.AuthOrgID, startd.StartTime
) 
UPDATE da 
SET EndTime = upd.EndTime 
FROM rds.DimAuthorizers da
JOIN upd ON da.AuthOrgID = upd.AuthOrgID
         AND da.StartTime = upd.StartTime

3. 临时应急方案

如果不想修改连接设置,可以分块选中脚本运行:先选中MERGE语句块执行,再选中WITH语句块执行,避免DBeaver将整个脚本当成单一语句解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:31:14