SQL Server异常处理问题:INSERT失败无提示,请排查错误
问题排查及修复
两个关键错误导致失败无提示
INSERT语法错误直接终止批处理
你写的INSERT语句里,指定了3个插入列([MemberID], [UserID], [Added]),但VALUES里传了4个值,这种列数和值数量不匹配的错误属于语法错误,SQL Server在编译阶段就会直接报错,后面的错误捕获、事务处理代码根本没机会运行,自然看不到任何提示。变量名拼写错误
你声明的变量是@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
相关产品推荐
相关产品推荐

