Sql server 如何在SSIDB中将可执行错误作为消息公开

Sql server 如何在SSIDB中将可执行错误作为消息公开,sql-server,ssis,exe,executable,ssis-2014,Sql Server,Ssis,Exe,Executable,Ssis 2014,我们目前正在调用一个可执行文件,该文件是使用python从SSIS执行进程任务中构建的,作为夜间批处理作业的一部分运行。但是,当可执行文件失败时,只会发出一条非常基本的通用错误消息,而不引用真正的底层错误。通过命令行运行可执行文件时,基本错误将正确返回 在通过SSIS Execute Process任务调用可执行文件并将其写入或记录到SSISDB目录时,我们是否可以冒泡出可执行文件的潜在错误 请参阅下面的现有错误和应该返回的理想错误(当前从命令行运行时返回) 在执行流程任务上没有任何选项可用于

我们目前正在调用一个可执行文件,该文件是使用python从SSIS执行进程任务中构建的,作为夜间批处理作业的一部分运行。但是,当可执行文件失败时,只会发出一条非常基本的通用错误消息,而不引用真正的底层错误。通过命令行运行可执行文件时,基本错误将正确返回

在通过SSIS Execute Process任务调用可执行文件并将其写入或记录到SSISDB目录时,我们是否可以冒泡出可执行文件的潜在错误

请参阅下面的现有错误和应该返回的理想错误(当前从命令行运行时返回)


在执行流程任务上没有任何选项可用于在失败时重定向输出并在日志记录中将其恢复

要实现这一目标,您需要:

  • 定义了一个变量来捕获输出
  • 在执行流程任务的StandardOutputVariable选项中设置该值
  • 在该任务的事件处理程序下,创建一个“OnTaskFailed”事件处理程序,并使用脚本任务返回输出
例如:

名为“User::exe_output”的字符串变量,然后在执行流程任务上添加StandardOutputVariable:

各国:

StandardOutputVariable选择一个变量以捕获 处理,或单击以创建新变量

然后在事件处理程序下:

  • 在执行流程任务上添加“OnTaskFailed”事件
  • 添加脚本任务

打开脚本任务并将“User::exe_output”变量添加为只读变量:

编辑脚本并添加以下代码:

public void Main()
{
    //Just assigning the exe_output to a local variable
    string exe_error = Dts.Variables["User::exe_output"].Value.ToString();

    //Checking it its blank
    if (exe_error != "")
    {
        //This brings back out whatever was captured in the output of the execute process task.
        //Depending on how you want it logged, warning or an error, either one will log the output.

        //Dts.Events.FireError(-1, "Execute Process Task Error", exe_error, String.Empty, 0);
        Dts.Events.FireWarning(-1, "Execute Process Task Error", exe_error, String.Empty, 0);
    }
    Dts.TaskResult = (int)ScriptResults.Success;
}
然后,当流程运行且失败时,您仍然会收到原始消息,但现在您还可以从执行流程任务的输出中获得捕获的信息:


在我的示例中,我只是尝试复制一个不存在的文件。

您可以使用退出代码来表示特定的错误您是否尝试在SSIS中使用OneError处理程序来查看暴露在那里的消息?我可能会使用StandardErrorVariable或StandardOutputVariable选项,并有一个
OnTaskFailed
处理程序报告该变量的值(希望是错误消息)。这还取决于EXE如何退出和报告异常。这很好!最后,我使用StandardErrorVariable捕获可执行错误,并使用OnTaskFailed事件处理程序通过脚本任务将其冒泡出来