有没有人能够通过 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 中打开文件,在记录的“末尾”创建一个列,然后将其一直填充到 1s 或其他一些字符。

令人讨厌,但可以是一个快速的解决方案。

如果您没有能力执行此操作,则可以按照上述方式以编程方式执行相同的操作。

为什么不能将其作为测试文件导入并将列分隔符设置为“,”并将行分隔符设置为 CRLF?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top