如何将SSIS中的ErrorCode和ErrorColumn转换为错误消息和列名?

Ber*_*ann 32 ssis

我正在将行从平面文件源重定向到平面文件目标.重定向行中的默认元数据是:

  • 原始平面文件源行
  • ErrorCode
  • ErrorColumn

我在输出平面文件中得到的是源行(不错)和错误代码(不好,例如-1071628249)和错误列(不好,因为它是列的内部ID).

如何转换行以输出错误消息(例如"数据被截断.")和平面文件源中定义的列名?

换句话说,而不是...,-1071607675,10我想看到:

...,The data was truncated,Firstname

或者(如果以前不可能);

...,DTS_E_FLATFILESOURCEADAPTERSTATIC_TRUNCATED,Firstname.

Per*_*uel 14

错误消息列表位于以下位置:MSDN,Integration Services错误和消息参考 http://msdn.microsoft.com/en-us/library/ms345164%28v=sql.100%29.aspx

列数编号可在SSIS的数据流任务中找到:选择任务组件生成错误,高级编辑,"输入和输出属性"选项卡中,外部列的属性.


Ber*_*ann 13

可以使用脚本组件实现部分问题(添加错误描述).使用脚本组件增强错误输出中对此进行了描述.

似乎Dougbert博客有一个添加列名的解决方案,但它远非简单.我很惊讶这在SSIS中很难做到; 您认为知道源和列的名称是一个基本需求.

  • 这是一个仅限链接的答案,并未描述链接腐烂情况下的解决方案,或者由于某种原因链接网站的解决方案无法读取.我的开发机器没有连接到互联网,我无法访问另一台机器,我可以在道格伯特网站上打开包. (3认同)
  • “我很惊讶这在 SSIS 中很难做到”——如果这里讨论的不是 _Microsoft_ SQL Server,我也会感到惊讶。 (2认同)

小智 6

有一个简单得多的答案。只需将错误输出重定向到新的目标文件(CSV 或其他文件),然后在错误输出上启用 DataViewer....

SSIS 中的数据查看器


小智 6

可以使用脚本组件作为转换来实现,将错误输出重定向到脚本组件并按照步骤实现您要查找的内容。

(1) 打开脚本组件,

输入列选择

  1. 错误列
  2. 错误代码

输入和输出添加输出列

  1. 错误描述 (DT_STRING 500)
  2. ErrorColumnDescription (DT_STRING 100)

(2) 编辑脚本

粘贴以下代码

    using System;
    using System.Data;
    using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
    using Microsoft.SqlServer.Dts.Runtime.Wrapper;
    #endregion

    /// <summary>
    /// This is the class to which to add your code.  Do not change the name, attributes, or parent
    /// of this class.
    /// </summary>
    [Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
    public class ScriptMain : UserComponent
    {

        public override void Input0_ProcessInputRow(Input0Buffer Row)
        {
            var component130 = this.ComponentMetaData as IDTSComponentMetaData130;
            if (component130 != null)
            {
                Row.ErrorDescription = component130.GetErrorDescription(Row.ErrorCode);
                Row.ErrorColumnDescription = component130.GetIdentificationStringByID(Row.ErrorColumn);
            }
        }
Run Code Online (Sandbox Code Playgroud)


小智 5

Pragmatic Works 似乎有一个错误输出描述转换,它是他们称为“任务工厂”的产品社区版(免费)的一部分。

错误输出描述转换为用户提供了一个用户界面,可以检索有价值的信息,例如 ErrorCode、ErrorColumn、ErrorDescription、ComponentName(产生错误)、ColumnName(如果已知)、ColumnType 和 ColumnLength。

它还允许您将任何输入列传递到错误输出。老实说,它非常方便,并且为我节省了数小时的时间来排除 SSIS 包的故障。

  • 这并不意味着对于可以使用第三方免费组件的人来说,答案的有效性会降低。 (2认同)