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

修改记录主键时SQL中BEGIN/END与GO的使用错误排查

问题分析与代码修正

你的SQL代码出现语法错误的核心原因是GO的使用破坏了BEGIN/END的代码块结构:

  • GO是SQL Server的批处理分隔符,每遇到GO,当前批处理就会立即执行并开启新批。你在BEGIN内部插入GO,导致第一个批处理仅包含IF NOT EXISTS (...) BEGIN SET IDENTITY_INSERT Settings ON,此时BEGIN没有对应的END,直接触发语法错误。
  • 后续的INSERT、DELETE语句以及最后的END会被视为独立批处理,END找不到匹配的BEGIN,同样报错。
  • 另外,SET IDENTITY_INSERT的生效逻辑依赖当前批处理,拆分批次后,INSERT操作可能无法正确继承IDENTITY_INSERT的开启状态。

修正后的SQL代码

IF NOT EXISTS (SELECT TOP 1 * FROM dbo.Settings 
               WHERE Descr = 'GL for Credit Memo' AND SettingID = 198)
BEGIN
    SET IDENTITY_INSERT dbo.Settings ON

    INSERT INTO [dbo].[Settings]
                ([SettingID],
                [Created],
                [Descr],
                [Category],
                [OrderNo],
                [DataType],
                [InActive],
                [IsRequired])
            VALUES
                (198,
                GETDATE(),
                'GL for Credit Memo',
                'Accounting',
                7,
                4,
                NULL,
                1)

    DELETE FROM [dbo].[Settings] WHERE Descr = 'GL for Credit Memo' AND SettingID = 200

    SET IDENTITY_INSERT dbo.Settings OFF
END

重要说明

  • 移除BEGIN/END块内的GO,让所有逻辑在同一个代码块和批处理中执行,确保IF条件的判断能覆盖后续所有操作。
  • SET IDENTITY_INSERT的开启与关闭必须和INSERT操作在同一批处理内,否则可能出现设置不生效的问题。
  • 统一Descr字段的大小写(原代码DELETE语句中用了小写descr),避免数据库区分大小写时出现匹配失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:40:25