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

SQL Server异常处理问题:INSERT失败无提示,请排查错误

问题排查及修复

两个关键错误导致失败无提示

  1. INSERT语法错误直接终止批处理
    你写的INSERT语句里,指定了3个插入列([MemberID], [UserID], [Added]),但VALUES里传了4个值,这种列数和值数量不匹配的错误属于语法错误,SQL Server在编译阶段就会直接报错,后面的错误捕获、事务处理代码根本没机会运行,自然看不到任何提示。

  2. 变量名拼写错误
    你声明的变量是@errornumbetr(最后多了个t),但后续赋值用的是@errornumber,就算INSERT能正常执行,这个错误也会导致异常分支无法触发。

修复后的代码

DECLARE @errornumber tinyint

BEGIN TRAN

-- 修正VALUES值数量,和列数保持一致
INSERT INTO [dbo].xyz ([MemberID], [UserID], [Added])
VALUES (1, '0005135', GETDATE())
       
SET @errornumber = @@ERROR

IF (@errornumber = 0)
BEGIN
    PRINT 'Success! Inserted note'
    COMMIT TRAN
END
ELSE
BEGIN
    PRINT 'Couldn''t insert note'
    ROLLBACK TRAN
END
GO

正确的异常测试方式

语法错误会直接终止批处理,没法测试你的异常逻辑。要测试的话,得用运行时错误,比如插入违反约束的数据:

DECLARE @errornumber tinyint

BEGIN TRAN

-- 假设MemberID有唯一约束,插入重复值触发错误
INSERT INTO [dbo].xyz ([MemberID], [UserID], [Added])
VALUES (1, '0005135', GETDATE())
INSERT INTO [dbo].xyz ([MemberID], [UserID], [Added])
VALUES (1, '0005136', GETDATE())
       
SET @errornumber = @@ERROR

IF (@errornumber = 0)
BEGIN
    PRINT 'Success! Inserted note'
    COMMIT TRAN
END
ELSE
BEGIN
    PRINT 'Couldn''t insert note'
    ROLLBACK TRAN
END
GO

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:40:26