Stored procedures Try/Catch无法捕获存储过程中的异常

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按

我正在努力使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,然后尝试传递字符串

这样打电话:

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