如何使用 SSIS 导入可变记录长度 CSV 文件?
-
01-07-2019 - |
题
有没有人能够通过 SSIS 将可变记录长度文本文件 (CSV) 导入 SQL Server?
我曾多次尝试使用 SSIS 将 CSV 文件放入 SQL Server 表中,其中输入文件具有不同的记录长度。对于这个问题,两个不同的记录长度是63和326字节。所有记录长度都将导入到同一个 326 字节宽度的表中。
有超过 100 万条记录可供导入。
我无法控制导入文件的创建。
我必须使用SSIS。
我已向 MS 确认这已被报告为错误。我尝试了几种解决方法。大多数情况下,我尝试编写自定义代码来拦截记录,但我似乎无法让它按我想要的方式工作。
解决方案
我遇到了类似的问题,并使用了自定义代码(脚本任务)和“数据流”选项卡下的脚本组件。
我有一个平面文件源输入到脚本组件中。在里面,我使用代码来操作传入的数据并将其修复为目的地。
我的问题是提供商使用“000000”作为没有可用日期,而另一列有填充/修剪问题。
其他提示
导入此文件应该没有问题。只需确保在创建平面文件连接管理器时选择 分隔符 格式,然后将 SSIS 列长度设置为最大文件列长度,以便它可以容纳任何数据。
您似乎使用的是固定宽度格式,这对于 CSV 文件来说是不正确的(因为您有可变长度列),或者您可能错误地设置了列分隔符。
同样的问题。就我而言,目标 CSV 文件的页眉和页脚记录的格式与文件正文完全不同;页眉/页脚用于验证文件处理的完整性(日期/时间、记录计数、金额总计 - 任何其他名称的“校验和”...)。这是来自“大型机”环境的文件的常见格式,虽然我还没有开始使用它,但我希望必须使用脚本来剥离页眉/页脚,将其余部分保存为新文件,处理新文件文件,然后进行验证。不能完全指望 MS 拥有开箱即用的功能(但这肯定会很好,不是吗?)。
您可以使用 C# 编写一个脚本任务来迭代每一行,并使用适量的逗号来填充数据。当然,这是假设所有数据都与正确的列对齐。
IE。当您阅读每条记录时,您可以“计算”逗号的数量。然后,只需将 X 个逗号附加到记录末尾,直到它具有正确的逗号数量。
Excel 存在一个问题,导致在转换为 CSV 时创建此类文件。
如果您可以“手动”执行此操作,解决此问题的最佳方法是在 Excel 中打开文件,在记录的“末尾”创建一个列,然后将其一直填充到 1
s 或其他一些字符。
令人讨厌,但可以是一个快速的解决方案。
如果您没有能力执行此操作,则可以按照上述方式以编程方式执行相同的操作。
为什么不能将其作为测试文件导入并将列分隔符设置为“,”并将行分隔符设置为 CRLF?