Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/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 如何防止SSI截断平面文件中最后一个数据行的最后一个字段?_Sql Server_Ssis_Sql Server 2008 R2_Flat File - Fatal编程技术网

Sql server 如何防止SSI截断平面文件中最后一个数据行的最后一个字段?

Sql server 如何防止SSI截断平面文件中最后一个数据行的最后一个字段?,sql-server,ssis,sql-server-2008-r2,flat-file,Sql Server,Ssis,Sql Server 2008 R2,Flat File,我有一个SSIS包,可以解压并加载一个文本文件。从调试器,从上传到生产环境的各种服务器,它一直工作得很好 我现在的问题是:正在加载一个文件,一切都进行得很顺利,但突然,在最后一个数据行(根据错误消息),最后一个字段被截断。我想我们收到的文件可能是乱七八糟的,打开了,那里一切都很好 它是一个|分隔文件,没有文本限定符,行分隔符为{CR}{LF}。由于带有截断错误的字段是行中的最后一个字段(在本例中是整个文件的最后一个字段),因此其分隔符是{CR}{LF},而不是| 这个文件看起来很原始,我甚至将它

我有一个SSIS包,可以解压并加载一个文本文件。从调试器,从上传到生产环境的各种服务器,它一直工作得很好

我现在的问题是:正在加载一个文件,一切都进行得很顺利,但突然,在最后一个数据行(根据错误消息),最后一个字段被截断。我想我们收到的文件可能是乱七八糟的,打开了,那里一切都很好

它是一个
|
分隔文件,没有文本限定符,行分隔符为
{CR}{LF}
。由于带有截断错误的字段是行中的最后一个字段(在本例中是整个文件的最后一个字段),因此其分隔符是
{CR}{LF}
,而不是
|

这个文件看起来很原始,我甚至将它加载到Excel中,没有问题,也没有抱怨。我在VS2008中通过deugger在本地机器上运行了这个文件,它运行得非常完美。有人对这样的行为有过任何问题吗?我不能在它崩溃的环境中对它进行太多测试,因为这是我们的生产环境,而且现在是高峰时间。。。。因此,我们非常感谢您的任何建议

错误消息:
说明:数据转换失败。列“ACD_Flag”的数据转换返回状态值4和状态文本“文本被截断或一个或多个字符在目标代码页中不匹配”。结束错误:2013-02-01 01:32:06.32代码:0xC020902A来源:将ACD文件加载到表HDS平面文件1[9]说明:“输出列”ACD_标志(1040)由于发生截断而失败,“输出列”ACD_标志(1040)上的截断行配置指定截断失败。在指定组件的指定对象上发生截断错误。结束错误:2013-02-01 01:32:06.32代码:0xC0202092来源:将ACD文件加载到表[9]说明:处理数据行737541上的文件“我的平面文件”时出错。

737541是文件中的最后一行

更新:最初我有行分隔符
{CR}
,但我已将其更新为
{CR}{LF}
,以尝试解决此问题。。。尽管无效。

更新: 我可以重新创建您添加到问题中的错误消息。如果行中的列分隔符多于平面文件连接管理器中定义的列分隔符,则会发生错误

下面是一个简单的例子来说明这一点。我创建了一个简单的文件,如下所示

我创建了一个包,并用下面显示的设置配置了平面文件连接管理器

我用数据流任务配置了这个包,以读取文件并将数据填充到数据库表中。当我执行包时,它失败了

单击投标文件上的
执行结果
选项卡。它显示的消息与您在问题中发布的消息相同

[Flat File Source [44]] Error: Data conversion failed. The data conversion for column "Column 1" returned status value 4 and status text "Text was truncated or one or more characters had no match in the target code page.".
[Flat File Source [44]] Error: The "output column "Column 1" (128)" failed because truncation occurred, and the truncation row disposition on "output column "Column 1" (128)" specifies failure on truncation. A truncation error occurred on the specified object of the specified component.
[Flat File Source [44]] Error: An error occurred while processing file "C:\temp\FlatFile.txt" on data row 2.
[SSIS.Pipeline] Error: SSIS Error Code DTS_E_PRIMEOUTPUTFAILED.  The PrimeOutput method on component "Flat File Source" (44) returned error code 0xC0202092.  The component returned a failure code when the pipeline engine called PrimeOutput(). The meaning of the failure code is defined by the component, but the error is fatal and the pipeline stopped executing.  There may be error messages posted before this with more information about the failure.
希望这有助于确定您的问题

先前的答复: 我认为文件最后一行的最后一个字段中的值可能超过了平面文件连接管理器上最后一列的
OutputColumnWidth
属性的值

右键单击SSIS包上的平面文件连接管理器。单击平面文件连接管理器编辑器上的
Advanced
选项卡页面。单击最后一列并检查
OutputColumnWidth
属性上的值

现在,验证导致包失败的文件最后一行的最后一个字段上的数据长度

如果这是问题的原因,则有两种可能的解决方法:

  • 将最后一列上的
    OutputColumnWidth
    属性增加到满足要求的适当长度

  • 如果不关心截断警告,可以更改平面文件源编辑器最后一列的截断错误输出。双击平面文件源编辑器
  • ,单击错误输出
    。将截断列值更改为忽略故障或重定向行。我更喜欢
    Redirect row
    ,因为它可以通过将无效数据重定向到单独的表并采取必要的措施来修复数据,从而跟踪传入文件中的数据问题

    希望这能给你一个解决问题的办法


    它只在一台服务器上发生?您没有使用测试限定符吗?我们以前也有过这种情况。这就是修复它的方法

    转到该服务器并打开xml文件。搜索forTextQualifier并查看它是否显示:

     <DTS:Property DTS:Name="TextQualifier" xml:space="preserve">&lt;none&gt;</DTS:Property>
    

    如果它不能让它这么说。

    所以我想出了一个答案。其他答案都是经过深思熟虑的好答案,但我用了一种稍微不同的方法解决了这个问题

    我几乎排除了截断的实际可能性,因为一旦我查看平面文件中的数据,它就没有意义了。。。截断绝对不会发生。因此,我决定关注错误消息的后半部分:
    或目标代码页中的一个或多个字符不匹配

    经过一番激烈的谷歌搜索,我发现了一些类似这样的网站:

    基本上,这个想法是,如果您知道没有发生截断,那么您的字符没有代码页匹配,因此从
    1252 ANSI Latin I
    切换到
    65001 UTF-8
    应该会有所不同

    因为这已经转移到了生产环境中,而生产环境是唯一的环境