SSIS - 带有转义字符的平面文件

4

我有一个大型扁平文件,用于恢复数据。它是从使用双引号"作为限定符和竖线|作为分隔符的系统中导出的。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"。

我正在遇到以下错误:

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

如何告诉SSIS处理转义字符\

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)、双引号和逗号的字段应该用双引号括起来

...

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

1
用双引号转义双引号似乎会导致SSIS出现问题。 - Ben George
1
我无法找到关于这个的文档,所以我认为这种技术已经正式获得了“在我的机器上可行”的认证。 - Chad Schouggins
是的,我也不太确定为什么。对于我们的数据来说,用单引号替换它们是一个可接受的解决方法。 - Ben George
在进行了一些更多的搜索后,添加了一些信息。 - Chad Schouggins

-1

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

我建议联系数据源的技术联系人,并向他们解释,如果他们要发送一个使用双引号作为文本限定符的文件,则意味着文本中从来没有使用过双引号。如果这是可能的,就像现在这种情况一样,请告诉他们使用其他文本限定符或根本不使用。

既然正在使用'|'分隔符,那么使用文本限定符的意义何在?似乎是多余的。


1
这并不完全正确。在文本限定符中使用双引号并不意味着内容中就没有双引号了。在内容中使用双引号进行转义是很常见的做法(甚至可以说是事实上的标准)。 - Ben George
好观点。但我的经验是(仅限于我个人,可能因人而异),当出现这种情况时,文件的开发人员更愿意更改分隔符字符,而不是编写代码将转义字符插入内容中。 - Jim Horn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接