使用带有CRLF或LF的SSIS读取文本文件

Day*_*own 8 sql ssis

遇到一个问题,我收到一个文本文件,其中包含LF作为EOL.有时他们发送文件与CRLF作为EOL.有没有人对如何使SSIS使用任何一个作为EOL有任何好的想法?

这是一个非常简单的转换操作,使用notepad ++将其更改为我需要的,但是,它是手动的,我希望它是自动的.

谢谢,

编辑.我在数据流之前使用Swiss File Knife修复了它(但并不完美).

GSh*_*gan 7

如果行终止符总是一个或另一个,我建议设置2个文件连接管理器,一个带有"CRLF"行分隔符,另一个带有"LF"行分隔符.

然后,创建一个布尔包变量(类似于@IsCrLf)并将其作用于您的包.在SSIS包中的第一步是脚本任务,在其中读入文件流,并尝试发现行终止符(基于您在流中找到的内容).相应地设置变量的值.

然后,在控制流中的脚本任务之后,创建2个单独的数据流(每个文件连接管理器一个),并在连接器上使用设置为"表达式和约束" 的优先约束来指定要使用的数据流,具体取决于@IsCrLf变量的值.

以下建议的控制流程示例.

示例SSIS控制流程

  • 尽管这是一个有效的解决方案,但是仅仅是我还是这是讨厌SSIS的另一个原因吗? (2认同)

sor*_*ell 0

我支持 OP 对瑞士锉刀的投票。

为了集成它,我必须添加一个执行进程任务: 执行程序

然而,我有一堆运行 For-Each-File 循环的包,所以我需要一些 BIML - 也许这会帮助下一个灵魂。

<ExecuteProcess Name="(EXE) Convert crlf for <#= tableName #>"
              Executable="<#= myExeFolder #>sfk.exe">
  <Expressions>
    <Expression PropertyName="Arguments">
      "crlf-to-lf " +  @[User::sFullFilePath]
    </Expression>
  </Expressions>
</ExecuteProcess>
Run Code Online (Sandbox Code Playgroud)