sql-server - SSIS OLE DB 目标 - 错误输出重定向错误,没有说明
问题描述
我正在经历一些奇怪的事情。我在 SSIS 包中有一个数据流任务,它带有一个从表中获取数据的 OLE DB 源 - 然后有一个查找转换检查目标表中是否已经存在行键(目标表中的主键)然后查找否匹配输出连接到 OLE DB 目标。我还在脚本组件上连接了 OLE DB 目标的错误输出,该组件获取错误消息和错误列,以防出现问题并将这些数据插入异常表中。
我面临的问题是我的源表中有重复的行键,所以在这种情况下,错误会从 OLE DB 目标重定向到我的异常表,但我在异常表中得到的错误描述是“没有可用的状态” 而不是“违反 PRIMARY KEY 约束..无法在对象中插入重复键..重复键值是..” 这是包的屏幕截图,这是脚本代码:
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 的列中截断或 null 插入等其他错误中,这似乎工作正常。
例如在截断中,我得到:“转换失败,因为数据值溢出了提供程序使用的类型。” 在 NULL 约束违规中,我得到:“数据值违反了完整性约束。”
关于为什么仅使用重复键插入会发生这种情况的任何建议或想法?提前致谢!
解决方案
您应该注意,OLE DB 目标执行两种类型的验证:(1) 客户端和 (2) 服务器端。您可以查看以下答案以获取更多详细信息:
SSIS 引擎不会在运行时捕获服务器端错误(外键、触发器...)的描述,而客户端验证错误的描述(截断、非空...)是可读的。
推荐阅读
- c# - 将 SQL 命令转换为 Linq Lambda 函数?
- firebase - Firestore 不允许我指定数字文档 ID?它是如何工作的?
- r - 将数据从xlsx文件导入R时如何处理日期
- c# - '找不到类型或命名空间名称'如何在 Unity 中解决
- vb6 - vb6 / 通过 api 或其他方式在同一浏览器选项卡中打开 url?
- javascript - 在原始视图中以横向或纵向显示图像不拉伸
- c - 在 C 中创建一个要写入的新文件并将其初始化为空?
- node.js - 将 JSON 作为字符串存储在 Azure SQL 数据库中
- javascript - 无法使用 javascript 使窗口淡出或在 css 中添加过渡效果
- c# - 在 Unity 中修改 PS3 控制器的操纵杆灵敏度