我正在努力增强我在SSIS中的错误记录。除了使用SSIS的内置日志记录(OnError、OnWarning等)保存到sysssislog之外,我还跟踪被重定向到错误输出的特定行(我将这些行转换为xml,添加包和数据流任务的名称,并将这些行放入数据库中的表中)。我试图通过还包括哪个数据流组件抛出错误来增强跟踪重定向错误行时捕获的信息。
我的问题是,我不知道如何最好地传递组件名称,使其成为工作流程的一部分。我的第一个想法是创建一个自定义组件来捕获这些信息,但是我似乎找不到一种方法来从IDTSInput100对象回溯到其关联的IDTSPath100对象。如果我能做到这一点,那么我认为我可以获得与它相关联的IDTSOutput100对象的ID,然后再往回走一步,这样我就可以从数据流中的前一个组件获得元数据。
关于如何最好地实现我的最终目标,有什么建议吗?谢谢你的帮助!不读太多,但你不能只是有一个派生列,并添加所有的信息,你想传出的错误行?我通常以这种方式(在查找上)添加自定义错误消息,说"查找客户ID: [ColumnName]失败"。这对我很有用。
我弄清楚了如何获得上游组件名称!我对每个IDTSInput100对象使用GetVirtualInput方法,然后访问IDTSVirtualInputColumn100对象以查找UpstreamComponentName。肯定有更简单的方法,但至少我能做我需要做的。
还有rvphx,谢谢你的建议。这对于获取错误列的名称和描述非常有用。
这就是我使用上面的(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;