0

我的源平面文件中有两列,一个整数列和一个 varchar。

在数据流任务中,我选择了源对象,在配置错误部分中,我将“错误”和“截断”列都设置为“重定向”到用于被拒绝记录的输出文件。

如果我使用具有比列长度更长的 varchar 值的一行来装配数据,则该行将按预期重定向到 Rejected 平面文件。但是,当在 INT 列 (ProductID) 中遇到字符串值时,程序包会因以下错误而死。

[OLEDEST [200]] 错误:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80040E21。OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 10.0” Hresult:0x80040E21 描述:“多步 OLE DB 操作产生错误。检查每个 OLE DB 状态值(如果可用)。没有完成任何工作。”。

[OLEDEST [200]] 错误:输入“OLE DB 目标输入”(213) 上的输入列“ProductID”(1084) 存在错误。返回的列状态为:“由于可能丢失数据,无法转换该值。”。

起初我认为我需要更改任务以强制成功返回返回结果以增加最大错误计数,即使我认为“已处理”错误确实应该被视为错误。但是,这只确保了打包成功完成,具有 ProductId varchar 值的行仍然没有最终出现在错误文件中。

我错过了什么?

更新

是的,看起来我可以将文件布局的定义更改为仅包含字符串数据类型,并且重定向截断路径将适用于文件源对象。但是,要捕获转换错误,我认为我需要使用数据转换转换并从该任务重定向行。

对于数字数据类型,我会在平面文件源对象中定义“足够大”的列来处理任何合理的值,然后将其留给后续的数据转换任务来处理类型转换错误。

这听起来像Preet的建议......

更新 2 当我创建一个包含 2 列 int 和 varchar 的简单文件,然后将 char 值放入 int 列并运行从平面文件源对象重定向行的测试包时,将重定向 nopn INT 列。不知道为什么在我最初质疑的其他 pkg 中没有发生这种情况。也许这与这个包是使用 .NET 代码生成的事实有关,并且有些东西搞砸了。

这篇文章的摘要问题:

如果我从平面文件源重定向行,是否应该将包含具有非 int 值的整数列的行重定向到平面文件,或者您是否希望这会中止包?(如上所述,我得到不一致的结果,不知道为什么)

4

0 回答 0