平面文件连接管理器回车/换行不一致

时间:2018-12-27 21:28:37

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

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

2008R2平面文件连接管理器忽略行中的嵌入式{CR}{LF},但是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中的“预览”窗口显示两行:

2008R2_connectionmgr

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

2017_connectionmgr

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

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

编辑:为响应已删除的评论,如果可以,我将指定一个文本限定符,但获取的文件没有任何内容。

1 个答案:

答案 0 :(得分:3)

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

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

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

  

默认情况下,平面文件连接管理器始终检查一行   未加引号的数据中的定界符,并在行定界符时开始新行   被发现。这使连接管理器可以正确解析文件   缺少列字段的行。

有关更多信息,请参见this link