SSIS在导入平面文件源时丢失了一条记录。

10

我在 SSIS (2008) 中遇到了一个非常奇怪的问题。

基本工作流程如下:

使用平面文件源(CSV)将数据带入 SSIS,然后将其推入 SQL。

当在开发环境上运行该过程时,一切顺利。但是,当将 dtsx 包放置在生产环境中时,使用完全相同的平面文件来源,“文件中的最后一条记录”在到达 SQL 过程的起点时就被删除了。

我已经尽可能地检查了所有想得到的事情,包括行分隔符、列分隔符和重建平面文件源连接。

是否有人以前见过这样的情况?

CSV 文件包含 10 条记录和 4 个列。它是逗号分隔的,并由 {CR} {LF} 进行行分隔。该文件是由 Excel 生成的,文件末尾有一个空行。

如果需要更多信息,请让我知道。我不确定我还能提供什么。


你的开发环境和生产环境上的 SQL Server 补丁级别完全一致吗?请比较两个服务器上 SELECT @@VERSION 的结果。 - Will A
尽快将生产环境升级到SP2是值得的,这可能会解决你的问题。 - Will A
1
这个链接(以及其两个分支)可能非常有用。http://forums.asp.net/t/1339724.aspx/1 - Will A
我不知道我能多快更新服务器。如果有人有其他想法... - Grant
删除文件末尾的空行是否会影响导入? - Will A
显示剩余3条评论
3个回答

9

我曾经遇到过完全相同的问题。我发现,当我将SSIS包从一个服务器复制到另一个服务器时,有时候平面文件源的文本限定符会出现问题,因此它不再是<none>,而是_x003C_none_x003E_。修复这个问题后,没有记录被删除。


3
我曾经也遇到同样的问题,昨天我解决了它,方法是确保每个单独的列都没有被添加文本限定符。把所有列的文本限定符都设置为false就像魔术一样让我的工作了,希望这能帮到你。

这解决了我的问题。在dba.stackexchange上也发布了一个类似的问题/解决方案:http://dba.stackexchange.com/questions/6132/ssis-flat-file-manager-skips-the-last-record - Invalid Character

0

我之前遇到过类似的问题。这通常是因为你的生产SQL服务器是x64,而开发环境是X32。令人惊讶的是,x64 SQL服务器的OLEDB驱动程序并不完全支持。然而,x32位的驱动程序得到了很好的支持。

它总是缺少最后一条记录,后来在数据对账中找到了它。我使用的是平面文件源适配器,然后通过尝试不同的DFT发现,如果使用BULK INSERT,错误就会消失,因为它不依赖于X64驱动程序。


那就是答案了吗?在 dtexec.exe 上使用 /X86 选项有帮助吗?http://msdn.microsoft.com/en-us/library/ms162810.aspx - Alan McBee
该包作为SQL Server作业的一部分运行,并且我在作业的步骤中指定了使用SSIS。然后切换到执行选项,选择“使用32位运行时”,但是没有起到作用。奇怪的是,它仍然显示错误,并且在论坛上建议使用BCP或批量插入,因为这些任务不依赖于位数。 - Ram

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接