我每天必须导入大约50种不同类型的文件。其中一些有几列,有些可以容纳250列。
平面文件连接始终将所有列默认为50个字符。 有些列的长度可能超过50个字符,当然最终会出错。
目前我正在做一个愚蠢的搜索并用记事本++替换 - 打开所有SISS包,替换:
DTS:MaximumWidth="500"
通过
composer require elibyy/tcpdf-laravel
这是一个烦人的解决方法。 是否有可能将flatfile字符串列的默认长度设置为某个值?
我正在使用Microsoft Visual Studio Professional 2015和SQL Server数据工具14.0.61021.0进行开发
谢谢!
答案 0 :(得分:4)
我认为没有办法从SQL Server数据工具中实现这一目标。
但是你可以做一些解决方法来实现这个目标:
您可以使用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
答案 1 :(得分:4)
有一种方法可以使用标准的Visual Studio SSDT UI实现您想要的功能,尽管它非常模糊。自SQL Server 2005以来,AFAIK适用于此编辑器的每个版本。
打开包后,在“连接管理器”窗格中,右键单击“平面文件连接”,然后选择“编辑”。然后导航至高级页面。然后多选要更改的列(例如,按住Shift键单击一个范围或按住Ctrl键单击特定的一组)。现在,右侧出现的属性将应用于所有选定的列。
在下面显示的示例中,我将所有选定的列设置为255的宽度。
答案 2 :(得分:1)
埃斯特,
我建议您使用Object Model API,它允许您以编程方式开发SSIS包。使用它,您可以使用任何允许您从文本文件中收集数据/元数据的.net代码。此外,假设是,由于您正在使用SSIS,您可能已经熟悉在C#/ VB.Net中编写代码
现在,如果您刚开始使用对象模型API,那么将会有一个巨大的学习曲线(但如果SSIS是您的日常生活,那么值得学习它)。如果您现在没有时间投资,我建议您使用我编写的库(称为Pegasus),这极大地简化了如何使用对象模型API;你可以用几乎声明的方式创建你的包(使用C#)。
在Github上,有一个示例显示如何创建一个包,该包在给定文件夹中加载具有不同模式的任意数量的文本文件。见here;特别是方法GenerateProjectToLoadTextFilesToSqlServerDatabase()。
在该示例中,我使用名为lumenworks.framework的第三方.Net库来探测分隔文件并获取其元数据。使用这个库,我得到列的名称;我还根据对第一个' n'的抽样来推断数据类型和长度。行数。 (在我的代码中,我只推断整数,日期和字符串;如果您有更多数据类型,请相应地添加相关代码)。或者,您可以为所有列指定一种特定的数据类型和长度(看起来要使用500个字符串)。 [或者(在某些情况下),您可能在excel文件/配置文件中可以使用此元数据。]然后,我使用此元数据以编程方式配置文本文件连接管理器。
您可以从Github下载代码,并通过指定源文件的位置来运行DataFlowExample,并查看它的存在距离。
另一个建议是Biml,但我不确定你是否可以将自己的/第三方完整的C#代码(不仅仅是代码片段)整合到Biml工作流程中。如果可以的话,请选择Biml。
如果您有任何疑问,请与我们联系。