向SSIS平面文本文件输出中添加文本限定符的目的是什么?
我正在从数据中带有引号/逗号/管道/以及许多其他常见定界符的SQL数据库中提取数据。
列中数据点的极端示例:
"Johnson"|Smith,Jones
我将导出设置为以逗号分隔,并带有双引号“ text qualifier。我认为它将像这样导出数据,并且做到了:
,""Johnson"|Smith,Jones",
现在,我正在测试使用双引号文本限定符重新导入数据,以逗号分隔。我收到错误消息,说SSIS找不到分隔符。我认为它可以识别逗号和双引号的组合,本质上是一个更复杂的分隔符。
如果在输出中添加文本定界符不能解决实际数据中包含字符的问题,那该怎么办?
假设接收数据的人可能使用Excel之类的工具来处理数据,似乎无法处理||之类的复杂的多字符定界符,则是最好的方法,即删除了大部分数据中的通用分隔符,并将其用作分隔符?在我的情况下,可能是管道传输,而不是逗号。
答案 0 :(得分:2)
文本限定符用于行单元格中包含分隔符的情况。通常,文本限定符是双引号。如果单元格包含定界符,并且未使用文本限定符,则定界符之后出现的数据将溢出到下一列中。从那里开始,数据行可能会爆炸,并且随后没有列会对齐。真是一团糟。
此外,您将在Excel等应用程序中看不到文本限定符。但是,如果在Notepad ++中打开文件,则将看到文本限定符。文件中可能包含很多数据(例如,文本限定符,换行符,列分隔符等),但是在某些应用程序中却不显示。该数据通常用于定义数据的结构,而不是实际数据。
对于您的问题,您将需要从源数据中删除双引号或使用其他文本限定符。您可以使用单引号,但是如果您拥有类似Jones的数据怎么办?这里的想法是,在定义数据结构时,文本限定符应该是唯一的,据我所知,这意味着您不能拥有实际上是数据一部分的文本限定符(请参见下面Microsoft的注释-强调我的)。
每个Microsoft:
指定文本限定符。每列可以配置为 识别文本修饰符。
使用限定符将限定符嵌入到 平面文件连接管理器支持限定字符串。 文本限定符的double实例被解释为文字, 该字符串的单个实例。例如,如果文本限定符为 单引号,输入数据为'abc','def','g'hi',输出 数据为abc,def和g'hi。但是,嵌入了一个限定词的实例 限定字符串中的字符会导致平面文件源失败,并且 错误DTS_E_PRIMEOUTPUTFAILED。
参考