首页 > 解决方案 > 为什么这不能捕获存储过程中的错误?

问题描述

SQL Server 2014 (v12.0.5546) - 我有一个“主”存储过程,我从中运行了很多其他存储过程。如果出现错误,我希望它打印一行说明。

我今天运行它,主存储过程中的一个存储过程返回一个错误,说我正在尝试的表插入变量数量错误,但它没有打印错误。

我认为如果成功,存储过程会返回 0,因此除此之外的任何内容都意味着错误。我错了,还是我的流程有缺陷?

仅供参考,如果遇到错误,我不需要它停止运行,我只需要它吐出错误消息,这样我就知道它在哪里失败了。到这一切都说完了,这将增长到 20-30 个存储过程。

这是主存储过程:

ALTER PROCEDURE [dbo].[Master_CreateLoadTables]
AS
    DECLARE @retval INT

    -- Builds all tables required for the stored procedures
    EXEC @retval = [BuildTables]

    IF (@retval) = 0
    BEGIN
        SET @retval = 1

        EXEC @retval = [Load_CustomerLookup]

        IF (@retval) <> 0
            PRINT 'Load of Customer Lookup Table Failed'

        EXEC @retval = [Load_CustomerInvoices]

        IF (@retval) <> 0
            PRINT 'Load of Customer Invoice Tables Failed'

        EXEC @retval = [Load_Payments]

        IF (@retval) <> 0
            PRINT 'Load of Payments Table Failed'
    END
    ELSE
        PRINT 'Table Creation Failed'

标签: sqlsql-serverstored-procedures

解决方案


我认为如果成功,存储过程会返回 0,因此除此之外的任何内容都意味着错误。我错了,还是我的流程有缺陷?

存储过程返回您告诉它们的任何值。如果没有返回语句,则返回成功,0.

普遍接受的做法是返回 0 表示成功,返回错误代码表示失败。但这不是强制执行的。

您指的是用户存储过程。您需要调查它们在您的环境中是如何工作的。

我还鼓励您将存储过程的主体放在begin/end块中。


推荐阅读