2

我正在尝试增强我在 SSIS 中的错误日志记录。除了使用保存到 sysssislog 的 SSIS 内置日志记录(OnError、OnWarning 等)之外,我还跟踪重定向到错误输出的特定行(我将行转换为 xml,添加包的名称和数据流任务,并将行放入数据库中的表中)。我试图通过包括哪个数据流组件引发错误来增强跟踪重定向错误行时捕获的信息。

我的问题是我不知道如何最好地传递组件名称,使其成为工作流程的一部分。我的第一个想法是创建一个可以捕获此信息的自定义组件,但我似乎找不到从 IDTSInput100 对象回溯到其关联的 IDTSPath100 对象的方法。如果我能做到这一点,那么我想我可以获取与其关联的 IDTSOutput100 对象的 ID,然后再往后退一步,这样我就可以从数据流中的前一个组件中获取元数据。

关于如何最好地实现我的最终目标的任何建议?谢谢您的帮助!

4

3 回答 3

1

没有对此进行过多的阅读,但是您不能仅拥有一个派生列并将所需的所有信息添加到传出的错误行中吗?我通常以这种方式(在查找上)添加自定义错误消息,说“客户 ID 查找失败:[ColumnName]”。这对我很有用。

于 2013-01-08T16:37:29.623 回答
1

我想出了如何获取上游组件名称!我对每个 IDTSInput100 对象使用 GetVirtualInput 方法,然后访问 IDTSVirtualInputColumn100 对象以查找 UpstreamComponentName。必须有一个更简单的方法,但至少我能够做我需要的。

还有rvphx,谢谢你的建议。这对于获取错误列的名称和描述很有用。

于 2013-01-15T15:19:38.680 回答
0

这就是我使用上面的(user1956536)评论的方式。同意这很讨厌,必须有更好的方法来做到这一点。

    IDTSInputCollection100 inputCollection = ComponentMetaData.InputCollection;
    String upStreamComponent = String.Empty;
    if(inputCollection.Count > 0)
    {
        IDTSVirtualInput100 virtualInput =  inputCollection[0].GetVirtualInput();
        IDTSVirtualInputColumnCollection100 virtualInputColumnCollection = virtualInput.VirtualInputColumnCollection;
        if (virtualInputColumnCollection.Count > 0)
        {
            upStreamComponent = virtualInputColumnCollection[0].UpstreamComponentName;
        }
    }

    Row.ErrorDescription = ComponentMetaData.GetErrorDescription(Row.ErrorCode);
    Row.ErrorComponent = upStreamComponent;
于 2013-07-23T09:01:47.033 回答