SSIS - 文本限定符目的

Dav*_*res 3 sql sql-server ssis delimiter

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

我正在从 SQL 数据库中提取数据,该数据库在数据中包含引号/逗号/管道/和许多其他常见分隔符。

列中数据点的极端示例:

"Johnson"|Smith,Jones
Run Code Online (Sandbox Code Playgroud)

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

,""Johnson"|Smith,Jones",
Run Code Online (Sandbox Code Playgroud)

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

如果在输出中添加文本分隔符无助于解决实际数据中包含字符的问题,那么它有什么作用呢?

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

J W*_*ezy 5

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

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

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

根据微软:

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

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


参考