在 SSIS 平面文件 Conn 管理器中转义引用

Tim*_*DBA 4 sql-server ssis

我正在尝试导入一个简单的文本文件,其中有一些“额外”引号,并且我正在尝试查看是否有一种简单的方法来适应这一点。

为了重现该问题,我要导入一个简单的三行文件:

"FirstName","LastName","ZIPCODE"
"Tim","Harkin","11111"
"Tim","Harkin"","11111"
"George","Washington","12345"
Run Code Online (Sandbox Code Playgroud)

第三行中的额外引号会导致导入失败。查看文件连接管理器,我有以下设置:

在此输入图像描述

然而,查看预览,额外的引号最终“隐藏”了列分隔符:

在此输入图像描述

有什么建议让连接管理器忽略额外的引号,并解释平面文件中存在的每一行吗?

RDF*_*ozz 5

首先,我假设您不能简单地要求格式正确的 csv 文件。如果姓氏确实应该是Harkin",则 csv 文件中的条目应该通过将其加倍来转义双引号字符(即"Harkin""")。如果这是一个重复的过程,那么最好的解决方案肯定是需要格式正确的文件。

我不知道有什么好方法可以强制 SSIS 读取格式不正确的文件并弄清楚应该如何格式化它。

如果我处于你的立场,我会尝试以下两种方法之一:

  1. 手动修复文件:使用文本编辑器打开文件,最好是可以处理正则表达式的文本编辑器。","将文件中的字符串替换为唯一标记(例如, --COLBREAK--- 数据中不存在的任何内容都将起作用[如果有疑问,请先检查])。然后搜索两个字符之间的双引号(即不在行首和行尾的任何剩余双引号)。检查这些,如果合适的话替换"""。您可能还想确认所有行都具有预期的列分隔符数量,以确保没有嵌入","现有字符串或完全缺少列的行。完成后,将您的令牌更改回","并尝试再次导入文件。

  2. 分两个阶段加载数据:如果编辑器中需要操作的数据太多,请重写初始加载过程以将整行导入为一列。您可以在 SSIS 中处理此数据或将其加载到 SQL 表中。接下来,检查有效行(以 开头",有","两次,以 结尾";并且其中没有七个或更多实例"),并将这些行写入“有效”文件。将其余行写入“无效”文件。按照您最初的计划处理“有效”文件;再次,手动解析“无效”文件中的行,使它们有效,然后也处理它们。