Sql server SSIS包和引发错误

Sql server SSIS包和引发错误,sql-server,stored-procedures,ssis,Sql Server,Stored Procedures,Ssis,很抱歉,这是重复。我找不到一个答案与我所问的相符的问题。(这是相似的) 我有一个非常简单的SQL Server代理工作,只需一步。该包只执行一个存储过程。存储过程有一个try/catch块,当我试图引起异常时,它会被捕获,但不会向上传播并导致作业报告错误。工作成功了。我将错误记录到本地表中并提交它,这样我就知道我确实在输入catch块。我曾尝试提出严重级别为16和20的错误,以及其他一些可能不值得一提的事情 这是一个会导致它无法传播的包设置,还是我的存储过程有问题?谢谢 -- dumbed do

很抱歉,这是重复。我找不到一个答案与我所问的相符的问题。(这是相似的)

我有一个非常简单的SQL Server代理工作,只需一步。该包只执行一个存储过程。存储过程有一个try/catch块,当我试图引起异常时,它会被捕获,但不会向上传播并导致作业报告错误。工作成功了。我将错误记录到本地表中并提交它,这样我就知道我确实在输入catch块。我曾尝试提出严重级别为16和20的错误,以及其他一些可能不值得一提的事情

这是一个会导致它无法传播的包设置,还是我的存储过程有问题?谢谢

-- dumbed down structure
BEGIN

    SET NOCOUNT ON;

    -- buncha vars
    BEGIN TRY
    BEGIN TRANSACTION

      set @StepNumber = 10;

      select 1/0;

    COMMIT TRANSACTION;
    RETURN 0;
    END TRY
    BEGIN CATCH

        -- get the error
        SELECT @ErrorMessage = ERROR_MESSAGE(),
               @ErrorSeverity = ERROR_SEVERITY(),
               @ErrorState = ERROR_STATE();

        -- rollback the transaction
            ROLLBACK TRANSACTION;

        -- log the caught exception into the local log
        set @LogTimestamp = GETUTCDATE(); 
        set @LogMessage = @SessionGUID + ' - ' + CAST(@StepNumber AS NVARCHAR) + ' - ' + ' ERROR - ENTERED CATCH BLOCK - ERROR_MESSAGE()=' + @ErrorMessage + ' ERROR_SEVERITY()=' + cast(@ErrorSeverity as nvarchar) + ' ERROR_STATE()=' + CAST(@ErrorState as nvarchar) ;
        insert into @LocalLog(TimestampDT, SourceVch, MessageVch) values (@LogTimestamp, @LogSource, @LogMessage);

        -- transfer local log to master log table
        BEGIN TRANSACTION;
            --insert into RealTable selecting from @LocalLog;
        COMMIT TRANSACTION;

        -- slightly modify the error message before raising it to parent process
        SET @ErrorMessage = @LogSource + ' - error with @StepNumber=[' +CAST(@StepNumber as nvarchar)+ '] ERROR_MESSAGE()=' + @ErrorMessage;

        -- rethrow the error to the calling process
        RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState);

        -- do we need this return?
        RETURN @StepNumber;
    END CATCH
END
我得到的日志表告诉我至少(从我的日志表)捕获了错误。
“6a3e80fd-f480-459c-a42f-25fd3d5a42a8-125-错误-输入的捕获块-错误消息()=除以零遇到错误。错误严重性()=16错误状态()=1”

SSIS是否注意到错误并采取其异常路径?在调试器中运行包也不会失败(我是在别人的肩膀上做这件事的,所以我还不能完全调查它)。从存储的proc.PackageStart->包执行开始。-->OnProgress->Executing query->PackageEnd->PackageEnd生成相同的日志消息。我怀疑这与ExecuteSQL任务(或其连接管理器)的方式有关已在SSIS包中设置,但对我来说时间很长…我很感激您的持续响应。我尝试通过存储过程处理程序中的RAISERROR来传播错误。我注释了RAISERROR语句并返回@StepNumber。然后,我在包中添加了另一个工作流片段,并编写了脚本if=success else failure并将其分支到包内的成功电子邮件或失败电子邮件中。在SQL Server代理->作业中,当我启动并单步执行并运行它时。它会在步骤上产生错误(我首先需要此错误)。我还不确定我做错了什么,但这是可行的。再次感谢。显然ADO.Net驱动程序与RAISEERROR的配合比OLE DB驱动程序更好,但我还没有机会测试