【问题标题】:SSIS CSV Commas in fields字段中的 SSIS CSV 逗号
【发布时间】:2016-08-26 14:18:28
【问题描述】:

问题:

我正在尝试将 CSV 文件加载到我们的 SQL Server 2008 数据库中,但在解析字段时遇到了困难。

我找到了有关使用平面文件源读取文件并使用双引号作为文本限定符的说明,以便将带逗号的字段计为单个字符串值,并且能够成功地做到这一点。

数据:

此文件的每个帐户记录包含三个行项目。所有帐户记录都有第 1、2 和 3 行,1 有 35 列,2 有 22 列,3 有 37 列。这些列不是 1:1 关系,因此例如记录 1 上的第 6 列与记录 2 上的第 6 列的数据(或数据类型)不同。此外,每个行项目都需要进入单独的表,所以我有单独处理它们。

我的第一步是使用派生列转换分隔 1、2 和 3 记录。第二步是将每种记录类型的字段解析为各自的字段,这就是我遇到问题的地方。

最大的问题是第 1 条记录中的一个(有时是两个)字段有时会有逗号,有时没有。所以...有时 SSIS 会将 1 条记录解析为 36 个字段,有时是 35 个,有时是 34 个。

尝试的解决方案:

如果我使用带引号的平面文件源作为文本限定符来导入文件,则预览无法识别第 1 行和第 2 行之间的 {CR}{LF} 并且列不会在预览中正确对齐(第 2 列和第 3 列一起运行)并且在运行时出现错误。或者,我尝试使用 Ragged Right 文件源,将所有数据读取到一个 4000 长度的字符串列中,然后使用 FINDSTRING 和 SUBSTRING 进行解析并计算分隔符,但这是我遇到封闭逗号问题的地方。

如果我使用平面文件,它似乎无法正确识别 {CR}{LF} 终止符。如果我使用 Ragged Right,由于包含逗号,我似乎无法正确计算分隔符。这是第 22 条军规!

有什么见解???

【问题讨论】:

    标签: sql-server-2008 csv ssis


    【解决方案1】:

    如果我正确理解您的平面文件如下所示:

    "This Is Record 1, line 1, 34 other fields...
    This Is Record 1, line 2, 22 other fields...
    This Is Record 1, line 3, 37 other fields..."
    "This Is Record 2, line 1, 34 other fields...
    This Is Record 2, line 2, 22 other fields...
    This Is Record 2, line 3, 37 other fields..."
    

    那么您将无法使用平面文件源处理此问题。您将需要使用脚本转换源并编写自定义代码来解析文件的每一行并将其发送到相应的目标表。

    【讨论】:

    • 是的,这是对测试数据的准确表示。 ...我真的希望在某个地方有一个设置可以使这成为可能,而不必编写这么多自定义代码,但这对我来说很有意义,所以我会接受作为答案......然后开始工作!
    猜你喜欢
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    相关资源
    最近更新 更多