【问题标题】:How to import variable record length CSV file using SSIS?如何使用 SSIS 导入可变记录长度的 CSV 文件?
【发布时间】:2023-03-03 03:01:01
【问题描述】:

是否有人能够通过 SSIS 将可变记录长度文本文件 (CSV) 导入 SQL Server?

我一次又一次地尝试使用 SSIS 将 CSV 文件放入 SQL Server 表中,其中输入文件具有不同的记录长度。对于这个问题,两个不同的记录长度是 63 和 326 字节。所有记录长度都将导入到同一个 326 字节宽度的表中。

要导入的记录超过 100 万条。
我无法控制导入文件的创建。
我必须使用 SSIS。
我已向 MS 确认这已被报告为错误。 我尝试了几种解决方法。大多数都是我尝试编写自定义代码来拦截记录的地方,但我似乎无法让它按我想要的方式工作。

【问题讨论】:

  • 我使用 BULK Import 几乎没有编程来解决文件,它为我提供了与 SSIS 包相同的速度,但对导入也有更多的控制。
  • 我认为这也是 DTS / SQL Server 2000 的问题。他们没有纠正这一点会让我很痛苦。事实上,学习曲线对我来说很陡峭!

标签: sql-server sql-server-2005 ssis csv import


【解决方案1】:

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

【讨论】:

  • 基本上,当您在导入文件中遇到短记录时,SSIS 会继续导入到 SQL Server 表上的当前行中。它应该开始在表的全新行中导入文件的下一个字节。它完全破坏了数据。甚至 CRLF 本身也会被导入!
【解决方案2】:

导入此文件应该没有问题。只需确保在创建平面文件连接管理器时,选择 Delimited 格式,然后将 SSIS 列长度设置为最大文件列长度,以便它可以容纳任何数据。

您似乎使用的是固定宽度格式,这对于 CSV 文件不正确(因为您有可变长度列),或者您可能错误地设置了列分隔符。

【讨论】:

  • 我选择了 Delimited 并将长度设置为最大记录长度 - 不走运。我不得不放弃它并使用 C# 编写自定义导入代码,逐条处理。
【解决方案3】:

我遇到了类似的问题,并使用了自定义代码(脚本任务)和数据流选项卡下的脚本组件。

我有一个平面文件源输入脚本组件。在里面,我使用代码来操作传入的数据并将其修复到目的地。

我的问题是提供商使用“000000”作为没有可用的日期,而另一个列有填充/修剪问题。

【讨论】:

    【解决方案4】:

    同样的问题。就我而言,目标 CSV 文件的页眉和页脚记录的格式与文件正文完全不同;页眉/页脚用于验证文件处理的完整性(日期/时间、记录计数、总金额 - 任何其他名称的“校验和”......)。这是来自“大型机”环境的文件的常见格式,虽然我还没有开始使用它,但我希望必须使用脚本来去除页眉/页脚,将其余部分保存为新文件,处理新文件文件,然后进行验证。不能完全指望 MS 开箱即用(但肯定会很好,不是吗?)。

    【讨论】:

    • 编写自定义代码(脚本任务)来处理文件会更简单 IF SSIS 没有继续导入下一条记录作为当前记录 - 实际的 CR 和LF 字符也被导入!我从来没有检查过,因为这在去年是不可能的。也许它更正了,但我现在已经从这个开始了。如果我重新访问它,我会在上面发布我发现的内容。
    【解决方案5】:

    您可以使用 C# 编写脚本任务来遍历每一行并用适当数量的逗号填充以填充数据。当然,这假设所有数据都与正确的列对齐。

    即当您阅读每条记录时,您可以“计算”逗号的数量。然后,只需将 X 个逗号附加到记录的末尾,直到它具有正确数量的逗号。

    Excel 存在一个问题,导致在转换为 CSV 时会创建此类文件。

    如果您可以“手动”执行此操作,解决此问题的最佳方法是在 Excel 中打开文件,在记录的“末尾”创建一列,并用1s 一直填充它或其他角色。

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

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

    【讨论】:

      猜你喜欢
      • 2015-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多