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

为何SQL Server中@@ERROR无法捕获错误ID?

问题原因及解决方法

核心原因

你遇到的问题大概率是两个语句被作为独立批处理执行了。@@ERROR的作用域仅限当前批处理,每个批处理结束后@@ERROR会被重置为0。如果SELECT 1/0和SELECT @@ERROR被分成两个单独的批处理执行(比如在SSMS中逐句执行、选中单条语句执行),第二个批处理启动时@@ERROR已经是0,自然返回0。

而当两个语句在同一个批处理中执行时,SELECT 1/0触发错误(错误ID 8134)后,紧接着的SELECT @@ERROR会正确捕获这个错误值——因为同一批处理内@@ERROR会保留上一个语句的错误状态,直到下一个成功执行的语句覆盖它。

验证与解决方法

  1. 确保两个语句在同一批处理执行:
    选中全部两条语句一起执行,而非分开执行。执行代码如下:

    SELECT 1/0
    SELECT @@ERROR
    

    此时@@ERROR会返回预期的8134。

  2. 更可靠的替代方案:使用TRY/CATCH
    相较于依赖@@ERROR,TRY/CATCH是更现代、更稳定的错误捕获方式,不受批处理边界限制:

    BEGIN TRY
        SELECT 1/0
    END TRY
    BEGIN CATCH
        SELECT ERROR_NUMBER() AS ErrorID; -- 会返回8134
    END CATCH
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:30:06