SSIS OLE DB 目标 - 没有描述的错误输出重定向错误

SSIS OLE DB Destination - Error Output Redirection Error with no Description

我遇到了一些奇怪的事情。我在带有 OLE DB 源的 SSIS 包中有一个数据流任务 它从 table 中获取数据 - 然后有一个查找转换,它检查行键是否已经存在于目标 Table(目标中的主键 Table)然后查找不匹配输出是连接到 OLE DB 目标。 我还在脚本组件处连接了 OLE DB 目标的错误输出,该脚本组件获取错误消息和错误列以防出现问题并将这些数据插入异常 Table.

我面临的问题是我的源代码中有重复的行键 Table 所以在这种情况下错误会从 OLE DB 目标重定向到我的异常 Table 但是我在异常 Table 中得到的错误描述是“没有可用状态”而不是“违反主键约束..无法在对象中插入重复键..重复键值是..” 这是包 的屏幕截图,这是脚本代码:

public bool fireAgain = true;
public string customErrorDescription;
public string customErrorDescription;
public string ErrorDescription;
public string ErrorColumnDescription;
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
try
{
    var component130 = ComponentMetaData as IDTSComponentMetaData130;

    if (component130 != null)
    {
        Row.DateTimeInserted = DateTime.Now;

        if (Row.ErrorColumn <= 0)
        {
            ErrorColumnDescription = "No Data available - Unknown Error";
        }
        else if (Row.ErrorColumn > 0)
        {

            ErrorColumnDescription = component130.GetIdentificationStringByID(Row.ErrorColumn);
        }
        ErrorDescription = component130.GetErrorDescription(Row.ErrorCode).Replace("\r\n", " ");

        //Writes the error as Information in Logging
        customErrorDescription =
         $"Error in OLE DB Destination:{ErrorDescription}" +
         $"In Column: {ErrorColumnDescription}";
        ComponentMetaData.FireInformation(10, "Error", "Error", ErrorDescription, 0, fireAgain);

        Row.ErrorDescription = ErrorDescription;
        Row.ErrorColumnDescription = ErrorColumnDescription;
        Row.DestinationTableName = Variables.DestinationTable;
        Row.SourceName = "Source_View";
        Row.SourceType = "View";
    }
}
catch (Exception Ex)
{
    ComponentMetaData.FireError(10, "Error", Ex.Message, Ex.Message, 0, out fireAgain);
}

}

我想提一下,在不允许为空的列中截断或空插入等其他错误中,这似乎工作正常。

例如 在截断中,我得到:“转换失败,因为数据值溢出了提供者使用的类型。” 在 NULL 约束违规中,我得到:“数据值违反了完整性约束。”

关于为什么只有插入重复密钥才会发生这种情况有什么建议或想法吗? 提前致谢!

您应该注意,对 OLE DB 目标执行两种类型的验证:(1) 客户端和 (2) 服务器端。您可以查看以下答案了解更多详情:

SSIS 引擎在运行时不会捕获服务器端错误(外键、触发器...)的描述,而客户端验证错误的描述(截断、非空...)是可读的.