即使输入数据错误,SSIS 包也不会失败
Posted
技术标签:
【中文标题】即使输入数据错误,SSIS 包也不会失败【英文标题】:SSIS Package won't fail, even with bad input data 【发布时间】:2010-03-10 19:31:22 【问题描述】:我有一个即使输入错误也不会出错的 SSIS 包。在我的例子中,这个包从一个平面文件中读取,并将记录放入一个 SQL Server 表中。很简单,这里没什么特别的。
平面文件被定义为右对齐,每行 80 个字符,总共可能 10 列。问题:有时平面文件没有填充到 80 个字符,所以我们得到可变长度的行,而不是用空格填充其余部分。当这种情况发生时,我们希望包失败。
在我的平面文件源组件中,我设置了错误输出部分,这样如果任何列被截断,组件就会失败。然而由于某种原因,当我从 Visual Studio 运行包时,所有步骤都是绿色的,即使没有导入任何行。这是我得到的输出:
SSIS 包“SSIS 包 01.dtsx”正在启动。
信息:0x4004300A 在将数据导入 Table01,DTS.Pipeline:验证阶段开始。
信息:0x4004300A 在将数据导入 Table01,DTS.Pipeline:验证阶段开始。
信息:0x40043006 在将数据导入 Table01,DTS.Pipeline:准备执行阶段开始。
信息:0x40043007 在将数据导入 Table01,DTS.Pipeline:预执行阶段开始。
信息:0x402090DC at Import data to Table01, Flat File Source [1]:文件“C:\import_files\sampledata.dat”的处理已经开始。
信息:0x4004300C 在将数据导入 Table01,DTS.Pipeline:执行阶段开始。
警告:将数据导入 Table01 时出现 0x8020200F,平面文件源 [1]:文件末尾有部分行。
信息:0x402090DE at Import data to Table01, Flat File Source [1]:为文件“C:\import_files\sampledata.dat”处理的数据行总数为 0。
信息:0x402090DF 在将数据导入 Table01,OLE DB 目标 [5467]:数据插入的最终提交已开始。
信息:0x402090E0 在将数据导入 Table01,OLE DB 目标 [5467]:数据插入的最终提交已结束。
信息:0x40043008 在将数据导入 Table01,DTS.Pipeline:后执行阶段开始。
信息:0x402090DD at Import data to Table01, Flat File Source [1]:文件“C:\import_files\sampledata.dat”的处理已结束。
信息:0x40043009 在将数据导入 Table01,DTS.Pipeline:清理阶段开始。
信息:0x4004300B 在将数据导入 Table01,DTS.Pipeline:“组件“OLE DB 目标”(5467)”写入 0 行。
....所以没有导入记录,并且有关于部分行的警告,但包成功完成。当这个包被输入一个好的输入文件时,每行 80 个字符,它可以毫无问题地导入文件中的行数。
奇怪的是,当使用可变长度行作为输入时,我们还有其他 SSIS 包会失败。我已经查看了这些软件包并将其与此进行了比较,对于我的生活,我看不出它们可能会做些什么不同。
如果您有任何想法或线索,我可以关注,我将不胜感激。谢谢!
【问题讨论】:
【参考方案1】:另外一个修复是: 在 SQL 命令的开头插入 SET NOCOUNT ON 语句
我在以下位置发现了这一点: http://louiebao.net/ssis-package-succeeded-without-errors-but-wrote-0-rows/
【讨论】:
【参考方案2】:好的,我们已经解决了这个问题。发生的事情是每行中的最后一列需要一个 CR/LF ColumnDelimiter。
因此,当第一行被处理并出现短缺时,SSIS 不会仅仅因为它来得太早而确认 CR/LF。相反,它继续并将第二行作为第一行的一部分进行处理。在这种情况下,只剩下第二行了,我们得到了上面提到的截断消息,因为在字符 80 处从未遇到 CR/LF。
在其他 SSIS 包确实失败的情况下,许多行与预期的线宽足够接近,以至于当包尝试将它们填充到单个字段中时,会触发该字段的截断错误。
【讨论】:
以上是关于即使输入数据错误,SSIS 包也不会失败的主要内容,如果未能解决你的问题,请参考以下文章
SSIS 错误:尝试向数据流任务缓冲区添加行失败,错误代码为 0xC0047020
SSIS 错误:用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败
SQL作业sql ssis作业错误:“由于错误0xC0010014导致程序包无法加载,这在CPackage :: LoadFROMXML失败时会发生