【问题标题】:Flat file connection manager carriage return/line feed discrepancy平面文件连接管理器回车/换行差异
【发布时间】:2018-12-27 21:28:36
【问题描述】:

我正在从 SQL Server 2008R2 升级到 2017,并使用 SSIS 进行同样的跳跃。有许多平面文件导入正在拾取在行的列中嵌入了回车/换行符 ({CR}{LF}) 的文件。

2008R2 平面文件连接管理器会忽略一行内嵌入的 {CR}{LF}s,但 2017 年的平面文件连接管理器会将每个 {CR}{LF} 视为一个新行。在升级的连接管理器或我从头开始制作的全新连接管理器中也是如此。

在两个版本中,连接管理器具有相同的规范:

General Tab

  Locale: English (United States)
  Unicode: No
  Code page: 1252 (ANSI-Latin I)
  Format: Delimited
  Text qualifier: <none>
  Header row delimiter: {CR}{LF}
  Header rows to skip: 0
  Column names in the first data row: Check

Columns Tab

  Row delimiter: {CR}{LF}
  Column delimiter: Vertical Bar{|}

我正在测试的不是特别复杂的文本文件:

row_id|row_data|empty_column|created_by|one_more_field{CR}{LF}
1|random test data||ebrandt|{CR}{LF}
2|Data field with a carriage return{CR}{LF}
and a line feed embedded in it.||ebrandt|

我粘贴了行终止符,只是为了表明它们在那里。

Columns 选项卡上,BIDS 2008R2 中的预览窗口显示两行:

但在 2017 年,完全相同的文件被分成三行:

此项目中没有带宽来重新处理所有文件导入。

我可以更改回版本之间的设置是否已更改?还是我缺少另一个技巧?

编辑:作为对已删除评论的回应,如果可以的话,我会指定一个文本限定符,但我得到的文件没有。

【问题讨论】:

    标签: sql-server ssis sql-server-2008-r2 sql-server-2017


    【解决方案1】:

    在平面文件连接管理器中,您需要将AlwaysCheckForRowDelimiters 属性设置为False

    然后您的文件将像以前一样被解析。

    这是 2012 年进行的一项更改,将行为更改为 the following

    默认情况下,平面文件连接管理器总是检查一行 未引用数据中的分隔符,并在行分隔符时开始新行 被发现。这使连接管理器能够正确解析文件 包含缺少列​​字段的行。

    请参阅this link 了解更多信息。

    【讨论】:

      猜你喜欢
      • 2013-06-12
      • 1970-01-01
      • 2014-12-27
      • 2023-04-11
      • 2016-01-27
      • 1970-01-01
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      相关资源
      最近更新 更多