SSIS:平面文件的默认长度

Est*_* P. 4 sql-server ssis etl sql-server-data-tools ssis-2016

我每天必须导入大约50种不同类型的文件。其中一些只有几列,有些则多达250列。

平面文件连接始终将所有列默认为50个字符。某些列的长度可能超过50个字符,当然会导致错误。

目前,我正在使用记事本++进行愚蠢的搜索和替换-打开所有SISS程序包,替换为:

DTS:MaximumWidth="50"
Run Code Online (Sandbox Code Playgroud)

通过

DTS:MaximumWidth="500"
Run Code Online (Sandbox Code Playgroud)

这是一个烦人的解决方法。是否可以将Flatfile字符串列的默认长度设置为某个值?

我正在使用Microsoft Visual Studio Professional 2015和SQL Server数据工具14.0.61021.0开发

谢谢!

Had*_*adi 5

我认为没有办法从SQL Server数据工具中实现这一目标。

但是您可以采取一些解决方法来实现此目的:

  1. 最简单的解决方案,在“平面文件连接管理器-高级”选项卡中,选择所有列(使用Ctrl键),然后一次编辑即可更改所有列的数据长度属性。(在@MikeHoney答案中详细)
  2. 您可以使用BIML(商业智能标记语言)创建ssis包,如果您不熟悉BIML,则可以访问BIML Script网站以获得详细教程。

  3. 您可以创建一个Small应用程序,该应用程序循环遍历.dtsx文件夹中的文件,DTS:MaximumWidth="50"DTS:MaximumWidth="500"使用正态String.Replace函数或正则表达式替换。(您可以从.Dtsx文件中读取我的答案@ 自动版本号检索,以查看使用正则表达式读取.dtsx文件的示例)

读取和替换dtsx文件内容的功能(Vb.Net)

Public Sub FixDTSX(byval strFile as string)

    dim strContent as string = string.empty

    Using sr as new Io.StreamReader(strFile)

        strContent = sr.ReadToEnd()

        sr.Close()

    End Using

    strContent = strContent.Replace("DTS:MaximumWidth=""50""","DTS:MaximumWidth=""500""")

    Using sw as new Io.StreamWriter(strFile,False)

        sw.Write(strContent)

        sw.Close()

    End Using

End Sub
Run Code Online (Sandbox Code Playgroud)


Mik*_*ney 5

使用标准Visual Studio SSDT UI可以实现所需的功能,尽管它相当模糊。AFAIK自SQL Server 2005起可在此编辑器的每个版本中使用。

打开包后,从“连接管理器”窗格中,右键单击“平面文件连接”,然后选择“编辑”。然后导航到“ 高级”页面。然后,多选您要更改的列(例如,按住Shift键并单击某个范围或按住Ctrl键并单击特定的组)。现在,右侧显示的属性将应用于所有选定的列。

在下面显示的示例中,我将所有选定的列都设置为255的宽度。

平面文件连接管理器编辑器