Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 SSIS包赢得';即使输入数据不正确,也不会失败_Sql Server 2005_Ssis - Fatal编程技术网

Sql server 2005 SSIS包赢得';即使输入数据不正确,也不会失败

Sql server 2005 SSIS包赢得';即使输入数据不正确,也不会失败,sql-server-2005,ssis,Sql Server 2005,Ssis,我有一个SSIS包,即使输入错误也不会出错。在我的例子中,这个包从平面文件读取数据,并将记录放入SQL Server表中。很简单,这里没什么特别的事 平面文件被定义为右参差不齐,每行80个字符,可能总共10列。问题:有时平面文件没有填充到80个字符,因此我们得到可变长度的行,而不是填充其余的空格。当这种情况发生时,我们希望包失败 在平面文件源组件中,我设置了错误输出部分,这样,如果任何列被截断,组件将失败。然而,由于某些原因,当我从VisualStudio运行包时,所有步骤都是绿色的,即使没有导

我有一个SSIS包,即使输入错误也不会出错。在我的例子中,这个包从平面文件读取数据,并将记录放入SQL Server表中。很简单,这里没什么特别的事

平面文件被定义为右参差不齐,每行80个字符,可能总共10列。问题:有时平面文件没有填充到80个字符,因此我们得到可变长度的行,而不是填充其余的空格。当这种情况发生时,我们希望包失败

在平面文件源组件中,我设置了错误输出部分,这样,如果任何列被截断,组件将失败。然而,由于某些原因,当我从VisualStudio运行包时,所有步骤都是绿色的,即使没有导入任何行。以下是我得到的输出:

SSIS包“SSIS包01.dtsx”正在启动

信息:0x4004300A在将数据导入到DTS表01时。管道:验证阶段开始

信息:0x4004300A在将数据导入到DTS表01时。管道:验证阶段开始

信息:0x40043006在将数据导入到DTS表01时。管道:准备执行阶段开始

信息:0x40043007在将数据导入到DTS表01时。管道:预执行阶段开始

信息:0x402090DC在将数据导入Table01时,平面文件源[1]:已开始处理文件“C:\Import\u files\sampledata.dat”

信息:0x4004300C在将数据导入到DTS表01时。管道:执行阶段开始

警告:0x8020200F在将数据导入Table01平面文件源[1]时:文件末尾有一部分行

信息:0x402090DE在将数据导入Table01时,平面文件源[1]:为文件“C:\Import\u files\sampledata.dat”处理的数据行总数为0

信息:0x402090DF在将数据导入Table01时,OLE DB目标[5467]:数据插入的最终提交已开始

信息:0x402090E0在将数据导入Table01时,OLE DB目标[5467]:数据插入的最终提交已结束

信息:0x40043008在将数据导入Table01时,DTS。管道:后执行阶段开始

信息:0x402090DD在将数据导入Table01时,平面文件源[1]:文件“C:\Import\u files\sampledata.dat”的处理已结束

信息:0x40043009将数据导入到DTS的Table01。管道:清理阶段开始

信息:0x4004300B在将数据导入Table01时,DTS.Pipeline:“组件”OLE DB Destination(5467)写入了0行。

..因此没有导入任何记录,并且存在关于部分行的警告,但包成功完成。当这个包收到一个好的输入文件(每行80个字符)时,它导入的行数与文件中的行数相同,没有问题

奇怪的是,当使用可变长度行作为输入时,我们还有其他SSIS包失败。我已经看过这些软件包,并将它们与此进行了比较,在我的一生中,我看不出它们可能会有什么不同


如果你有任何想法或线索,我会很感激。谢谢

好的,我们已经解决了这个问题。发生的情况是,每行的最后一列需要一个CR/LF ColumnDelimiter

因此,当处理第一行时,SSIS不会确认CR/LF,因为它来得太早。它将继续并处理第二行,作为第一行的一部分。在本例中,只剩下第二行,我们得到上面提到的截断消息,因为在字符80处从未遇到CR/LF

如果另一个SSIS包失败,则许多行与预期的线宽足够接近,因此当包尝试将它们填充到单个字段中时,会触发该字段的截断错误。

另一个修复方法是: 在SQL命令的开头插入SETNOCOUNT ON语句

我是在: