我的源平面文件中有两列,一个整数列和一个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]]错误:输入时输入列“ProductID”(1084)出错 “OLE DB目标输入”(213)。该 返回的列状态为:“无法转换该值,因为 可能会丢失数据。“。
起初我认为我需要更改任务以强制成功返回返回结果增加最大错误计数,即使我认为“处理”错误应该被视为错误。但是,这只能确保包成功完成,具有ProductId的varchar值的行仍未在错误文件中结束。
我错过了什么?
更新
是的,看起来我可以更改文件布局的定义以仅包含字符串数据类型,并且Redirect Truncation路径可以在File Source对象上运行。但是,要捕获转换错误,我认为我需要使用数据转换转换并重定向该任务中的行。
对于数值数据类型,我会将Flat File Source对象中的列定义为“足够大”以处理任何合理的值,然后将其留给后续数据转换任务来处理类型转换错误。
这听起来像Preet的建议......
更新2 当我创建一个包含2列int和varchar的简单文件,然后在int列中放入一个char值并运行一个测试包来重定向Flat File Source对象中的行时,会重定向nopn INT列。不知道为什么在我最初质疑的其他pkg中没有发生这种情况。也许这与这个软件包使用.NET代码生成的事实有关,而且有些东西搞砸了。
此帖的摘要问题:
如果我从平面文件源重定向行,是否应将包含具有非int值的整数列的行重定向到平面文件,或者您希望这会中止该包? (如上所述,我得到的结果不一致,不知道为什么)