Stored procedures Try/Catch无法捕获存储过程中的异常
我正在努力使try/catch与存储过程一起工作,它似乎没有捕获到错误。我一直在四处寻找,但运气不好。我试图实现的是,如果调用存储过程时给出了无效值、无值或null,则显示错误号。我试过移动try-and-catch,感觉好像无处不在,但似乎错误可能在@SomeID-as-int行上。我很感激能得到的任何帮助 更改程序删除帐户 @SomeID作为int 像 开始尝试 声明@counter int set@counter=从表1中选择countSomeDate,其中SomeID=@SomeID按SomeID分组 开始 if@counter > 0 开始 打印“测试” 终止 其他的 开始 从表2中删除 其中SomeID=@SomeID 打印“删除成功” 终止 终止 结束尝试 开始捕捉 打印错误号 端接 执行删除帐户“1231221” Msg 8114,第16级,状态5,程序DeleteAcct,第0行 将数据类型varchar转换为int时出错。将param@SomeID声明为int,然后尝试传递字符串 这样打电话:Stored procedures Try/Catch无法捕获存储过程中的异常,stored-procedures,error-handling,sql-server-2012,try-catch,Stored Procedures,Error Handling,Sql Server 2012,Try Catch,我正在努力使try/catch与存储过程一起工作,它似乎没有捕获到错误。我一直在四处寻找,但运气不好。我试图实现的是,如果调用存储过程时给出了无效值、无值或null,则显示错误号。我试过移动try-and-catch,感觉好像无处不在,但似乎错误可能在@SomeID-as-int行上。我很感激能得到的任何帮助 更改程序删除帐户 @SomeID作为int 像 开始尝试 声明@counter int set@counter=从表1中选择countSomeDate,其中SomeID=@SomeID按
exec DeleteAcct 1231231231221
事实上,我怀疑@SomeID应该被声明为varchar,这个答案已经晚了,但我们一直在工作中这样做。 您应该尝试/捕获启动器,而不是正在执行的SP 我相信这个解释很明显,但让我们进一步了解: 被调用的过程不需要任何try/catch: 启动器或调用过程需要放入try/catch块,以便在启动器级别显示已执行过程的错误。
我试过了,但还是出错了。将数据类型numeric转换为int时出错。它不会打印错误。\u numberRemoved review queue review review REVIDED review queue COMMAND upvoted,因为自
alter procedure DeleteAcct
@SomeID as int
as
declare @counter int
set @counter = (select count(SomeDate) from Table1 where SomeID = @SomeID group by SomeID)
begin
if(@counter > 0)
begin
Print 'Testing'
end
else
begin
delete from Table2
where SomeID = @SomeID
Print 'Delete successful'
end
end
begin try
exec DeleteAcct '1231231231221'
end try
begin catch
print error_number()
end catch