平面文件连接管理器回车/换行差异

Eri*_*ndt 5 sql-server ssis sql-server-2008-r2 sql-server-2017

我正在从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{|}
Run Code Online (Sandbox Code Playgroud)

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

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|
Run Code Online (Sandbox Code Playgroud)

我粘贴在线路终结器上,只是为了表明它们在那里.

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

2008R2_connectionmgr

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

2017_connectionmgr

此项目中没有带宽可以重做所有文件导入.

我可以更改的版本之间是否有更改的设置?还是有另外一个我不知道的伎俩?

编辑:在回复已被删除的评论时,如果可以的话,我会指定一个文本限定符,但是我得到的文件没有.

Mar*_*ith 3

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

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

这是 2012 年进行的一项更改,旨在将行为更改为以下内容

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

有关更多信息,请参阅此链接。