SSIS - 文本限定符目的

问题描述 投票:3回答:1

将文本限定符添加到SSIS平面文本文件输出的目的是什么?

我将数据从SQL数据库中提取出来,该数据库中有引号/逗号/管道/和数据中的许多其他常见分隔符。

列中数据点的极端示例:

"Johnson"|Smith,Jones

我将导出设置为逗号分隔,带有双引号“文本限定符。我假设它会像这样导出数据,它确实:

,""Johnson"|Smith,Jones",

现在我正在测试重新导入数据,以逗号分隔,并使用双引号文本限定符。我得到错误说SSIS找不到分隔符。我认为它会识别组合逗号和双引号,基本上是一个更复杂的分隔符。

如果在输出中添加文本分隔符对于在实际数据中包含字符的问题没有帮助,它会做什么?

假设接收数据的人可能使用像Excel这样的工具来处理数据,这似乎无法处理复杂的多字符分隔符,如|“,这是通过从中删除最常见的分隔符来处理此问题的最佳方法我的数据,并使用它作为分隔符?可能管道在我的情况下,而不是逗号。

sql sql-server ssis delimiter
1个回答
2
投票

如果分隔符包含在行单元格中,则使用文本限定符。通常,文本限定符是双引号。如果单元格包含分隔符并且未使用文本限定符,则分隔符后出现的数据将溢出到下一列。从那里开始,数据行可能会爆炸,之后没有列会排成一行。这可能是一个真正的混乱。

此外,您不会在Excel等应用程序中看到文本限定符。但是,如果在Notepad ++中打开文件,则会看到文本限定符。可以存在许多数据(例如,文本限定符,换行符,列分隔符等),这些数据包含在文件中但不在某些应用程序中显示。此数据通常用于定义数据结构,而不是实际数据。

对于您的问题,您需要从源数据中删除双引号或使用其他文本限定符。您可以使用单引号,但如果您有像Jones这样的数据怎么办?这里的想法是文本限定符在定义数据结构时应该是唯一的,据我所知,这意味着你不能拥有实际上是数据一部分的文本限定符(参见下面的Microsoft注释 - 强调我的) 。

对于微软:

指定文本限定符字符。可以将每列配置为识别文本限定符。

平面文件连接管理器支持使用限定符字符将限定符字符嵌入限定字符串。文本限定符的双实例被解释为该字符串的文字单个实例。例如,如果文本限定符是单引号并且输入数据是'abc','def','g'hi',则输出数据是abc,def,g'hi。但是,嵌入在限定字符串中的限定符实例会导致平面文件源失败,并显示错误DTS_E_PRIMEOUTPUTFAILED。


参考

© www.soinside.com 2019 - 2024. All rights reserved.