SSIS-文本限定符目的

时间:2019-02-14 16:31:02

标签: sql sql-server ssis delimiter

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

我正在从数据中带有引号/逗号/管道/以及许多其他常见定界符的SQL数据库中提取数据。

列中数据点的极端示例:

"Johnson"|Smith,Jones

我将导出设置为以逗号分隔,并带有双引号“ text qualifier。我认为它将像这样导出数据,并且做到了:

,""Johnson"|Smith,Jones",

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

如果在输出中添加文本定界符不能解决实际数据中包含字符的问题,那该怎么办?

假设接收数据的人可能使用Excel之类的工具来处理数据,似乎无法处理||之类的复杂的多字符定界符,则是最好的方法,即删除了大部分数据中的通用分隔符,并将其用作分隔符?在我的情况下,可能是管道传输,而不是逗号。

1 个答案:

答案 0 :(得分:2)

文本限定符用于行单元格中包含分隔符的情况。通常,文本限定符是双引号。如果单元格包含定界符,并且未使用文本限定符,则定界符之后出现的数据将溢出到下一列中。从那里开始,数据行可能会爆炸,并且随后没有列会对齐。真是一团糟。

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

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

每个Microsoft:

  

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

     

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


参考