【问题标题】:SSIS - Flat File with escape charactersSSIS - 带有转义字符的平面文件
【发布时间】:2023-03-31 02:46:01
【问题描述】:

我有一个用于恢复数据的大型平面文件。它是从使用双引号 " 作为限定符和管道 | a 分隔符的系统导出的。SSIS 可以毫无问题地配置为此,但我遇到问题的地方是 \ 转义字符。

导致问题的行:

"125004267"|"125000316"|"125000491"|"height"|"5' 11\""|"12037"|"46403"|""|"t"|""|"2012-10-01 22:34:01"|"2012-10-01 22:34:01"|"1900-01-01 00:00:00"

数据库中的第四列应该是 5' 11"。

我收到以下错误:

错误:数据流任务 1 中的 0xC0202055,平面文件源 [2]:未找到列“posting_value”的列分隔符。

如何让 SSIS 处理 \ 转义字符?

【问题讨论】:

    标签: file csv ssis flat


    【解决方案1】:

    我知道这已经很老了,但我刚刚遇到了一个类似的问题,即在 SSIS 中的 CSV 中转义引号。似乎很奇怪,对此没有更灵活的支持,但它确实支持 VB 风格的双双引号。因此,在您的示例中,您可以预先解析文件以将其翻译成

    "125004267"|"125000316"|"125000491"|"height"|"5' 11"""|"12037"|"46403"|""|"t"|""|"2012-10-01 22:34:01"|"2012-10-01 22:34:01"|"1900-01-01 00:00:00"
    

    得到你想要的输出。这至少适用于 Sql Server 2014。

    这也适用于 Excel(2010 年测试)。不过,奇怪的是,仅在从文本文件中插入数据时,而不是在使用 Excel 打开 CSV 时。

    这似乎是根据RFC 4180 的标准化方法 哪些国家

    包含换行符 (CRLF)、双引号和逗号的字段 应该用双引号括起来

    ...

    如果使用双引号将字段括起来,则使用双引号 出现在字段内必须通过在它前面加上 另一个双引号。

    【讨论】:

    • 用双引号转义双引号似乎破坏了我们的 SSIS。
    • 我无法找到这方面的文档,所以我想这种技术已正式获得“在我的机器上工作”的认证。
    • 是的,不太清楚为什么。对于我们的数据,用单引号替换它们是一种可以接受的解决方法。
    • 经过一番搜索后添加了一些信息
    【解决方案2】:

    这可能不是您要寻找的答案,但是...

    我会联系数据源的技术联系人,并向他们解释如果他们要向您发送一个使用双引号作为文本限定符的文件,那么这意味着永远不会有任何文本中的双引号。如果可能的话,就像这里发生的那样,告诉他们使用另一个文本限定符,或者根本不使用。

    既然使用了管道分隔符,那么使用文本限定符有什么意义? 似乎是多余的。

    【讨论】:

    • 这不是真的。使用双引号作为文本限定符并不意味着内容中没有双引号。使用双引号来转义内容中的双引号是很常见的(甚至是事实上的标准?)。
    • 好点。不过,我的经验(只是我的,ymmv)当这种情况发生时,文件的开发人员更愿意更改分隔符,然后编写代码以将转义字符插入到内容中。
    猜你喜欢
    • 1970-01-01
    • 2018-04-18
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多