3

我有一个用于恢复数据的大型平面文件。它是从使用双引号 " 作为限定符和管道 | 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 处理\转义字符?

4

2 回答 2

0

我知道这已经很老了,但我刚刚遇到了一个类似的问题,即在 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)、双引号和逗号的字段应该用双引号括起来

...

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

于 2016-01-13T17:44:42.543 回答
-1

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

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

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

于 2015-01-07T16:09:40.463 回答