SSIS:平面文件默认长度
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSIS:平面文件默认长度相关的知识,希望对你有一定的参考价值。
我每天必须导入大约50种不同类型的文件。其中一些有几列,有些可以容纳250列。
平面文件连接始终将所有列默认为50个字符。有些列的长度可能超过50个字符,当然最终会出错。
目前我正在使用notepad ++进行愚蠢的搜索替换 - 打开所有SSIS包,替换:
DTS:MaximumWidth="50"
通过
DTS:MaximumWidth="500"
这是一个烦人的解决方法。是否有可能将flatfile字符串列的默认长度设置为某个值?
我正在使用Microsoft Visual Studio Professional 2015和SQL Server Data Tools 14.0.61021.0进行开发
谢谢!
我认为没有办法从SQL Server数据工具实现这一目标。
但是你可以做一些解决方法来实现这个目标:
- 最简单的解决方案,在平面文件连接管理器 - 高级选项卡中,选择所有列(使用Ctrl键)并在一次编辑中更改它们的数据长度属性。 (详见@MikeHoney答案)
- 您可以使用BIML (Business Intelligence Markup Language)创建ssis包,如果您是BIML的新手,您可以访问BIML Script网站获取详细的教程。
- 您可以创建一个小应用程序,循环遍历文件夹中的
.dtsx
文件,并使用常规DTS:MaximumWidth="50"
函数或使用正则表达式将DTS:MaximumWidth="500"
替换为String.Replace
。 (你可以阅读我的答案@ Automate Version number Retrieval from .Dtsx files,看看使用正则表达式读取.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
有一种方法可以使用标准的Visual Studio SSDT UI实现您想要的功能,尽管它非常模糊。自SQL Server 2005以来,AFAIK适用于此编辑器的每个版本。
打开包后,在“连接管理器”窗格中,右键单击“平面文件连接”,然后选择“编辑”。然后导航到“高级”页面。然后多选要更改的列(例如,按住Shift键单击一个范围或按住Ctrl键单击特定的一组)。现在,右侧显示的属性将应用于所有选定的列。
在下面显示的示例中,我已将所有选定列设置为255的宽度。
埃斯特万,
我建议你使用Object Model API,它允许你以编程方式开发SSIS包。使用它,您可以使用任何允许您从文本文件中收集数据/元数据的.net代码。此外,假设是,由于您使用的是SSIS,因此您可能已经熟悉在C#/ VB.Net中编写代码
现在,如果您刚开始使用对象模型API,那么将会有一个巨大的学习曲线(但如果SSIS是您的日常生活,那么值得学习它)。如果您现在没有时间投资,我建议您使用我编写的库(称为Pegasus),这极大地简化了如何使用Object Model API;您可以以几乎声明的方式创建包(使用C#)。
在Github上,有一个示例演示如何创建一个包,该包在给定文件夹中加载具有不同模式的任意数量的文本文件。见here;特别是方法GenerateProjectToLoadTextFilesToSqlServerDatabase()。
在该示例中,我使用名为lumenworks.framework的第三方.Net库来探测分隔文件并获取其元数据。使用这个库,我得到列的名称;我还根据对第一个'n'行的采样来推断数据类型和长度。 (在我的代码中,我只推断整数,日期和字符串;如果您有更多数据类型,请相应地添加相关代码)。或者,您可以为所有列指定一种特定的数据类型和长度(看起来要使用500个字符串)。 [或者(在某些情况下),您可能在excel文件/配置文件中可以使用此元数据。]然后,我使用此元数据以编程方式配置文本文件连接管理器。
您可以从Github下载代码,并通过指定源文件的位置来运行DataFlowExample,并查看它到达了多远。
另一个建议是Biml,但我不确定你是否可以将自己的/第三方完整的C#代码(不仅仅是代码片段)整合到Biml工作流程中。如果可以,那就去Biml吧。
如果您有任何疑问,请告诉我。
以上是关于SSIS:平面文件默认长度的主要内容,如果未能解决你的问题,请参考以下文章