我想知道在SSIS平面文件连接管理器中是否有人使用过一个工具(或特殊技术)来映射固定宽度的平面文件?
通常我只使用平面文件连接管理器编辑器(高级选项卡)并开始添加列信息(名称、宽度、数据类型等)。对于所有的列1×1。
这在过去对我来说很好,但现在我必须映射一个固定宽度的文件,该文件有近500列.
我在想(希望)应该有一种我可以使用的工具或技术,使我能够以更多的流线方式完成映射.
使用为该文件提供的数据字典,我可以轻松地创建一个excel (或文本)文档,例如,有几个列包含必要的信息SSIS所需的信息(列名、分隔符、InputColumnWidth、OutpuColumnWidth、DataType)来映射文件。
我想知道是否有一个SSIS工具或组件可以读取这个文件并自动在平面文件连接管理器中为我创建映射.
如果没有这样的工具,是否有人可以帮助我以最有效的方式映射文件呢?
我想知道我是否可以修改SSIS包xml文件,这样我就可以创建一些代码,为所有xml格式的列写出列信息,然后手动复制并粘贴到包xml文件中.不确定这是否有效..。
注意:在SSIS中映射文件之后,它将被加载到Server表中

发布于 2015-10-16 19:50:59
想到了两个选项,它们都是can't-say-enough-good-things-about-this-free-tool 投标帮手的特性。
第一个是创建固定宽度列特性。它非常简单,比如创建一个平面文件管理器,指向正确的文件并定义1列。
完成后,右键单击Connection并使用上下文敏感特性“创建固定宽度列.”

在下一个窗口中,将标签分隔列表(Excel)粘贴到编辑器中。

哦,是的,这很简单。如果您需要对列类型等做一些调整,那么您就可以通过编辑来正常地修改它。
我喜欢商业智能标记语言用于我的SSIS开发。它有很多好处,但在最基本的水平上,使用它来处理像可怕的平面文件,特别是当它们不提供标题行时(我在看你,你们这些大型机)。
在处理遗留系统时,我的经验常常是,它们在COBOL文案中有它们的文件定义。那些开发人员会给我发送带有列布局的Excel文件,如
DATABASE FIELD NAME START LOC LENGTH
SEND.DT 1 STRING(08)
SEND.TIME 9 STRING(08)
DT 17 STRING(08)
TERM 25 STRING(04)
%ZONE 29 STRING(01)这并不花哨,但Excel公式使它发挥了短暂的作用。因此,我将根据上面的内容创建4个新列。
净化后的名称(删除列名的无效字符)
=SUBSTITUTE(SUBSTITUTE(B3, ".", "_"), "%", "PCT_")长度(提取数字,注意这仍然有一个前导0,但不疼)
=MID(E3,LEN("STRING(")+1,LEN(E3)-LEN("STRING(")-1)XML (这为平面文件定义构建了实际的XML )
=CONCATENATE("<Column Name=""",F3,""" Length=""",G3,""" DataType=""AnsiString"" ColumnType=""FixedWidth"" CodePage=""1252"" />")DDL (不如在我完成时构建目标表)
=CONCATENATE(", ", F3, " varchar(", G3, ")")DDL的第一列获取删除的铅逗号,然后用CREATE TABLE dbo.FOO()包装。
最终,该XML会导致一些东西被放入FlatFileFormat标记中,然后简单地创建Connections集合,最后创建包本身。看起来很多,但实际上很简单,一旦你有了一个模式。
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<FileFormats>
<FlatFileFormat
Name="FFF Pickup"
CodePage="1252"
RowDelimiter="CRLF"
IsUnicode="false"
FlatFileType="RaggedRight">
<Columns>
<Column Name="SEND_DT" Length="08" DataType="AnsiString" ColumnType="FixedWidth" CodePage="1252" />
<Column Name="SEND_TIME" Length="08" DataType="AnsiString" ColumnType="FixedWidth" CodePage="1252" />
<Column Name="DT" Length="08" DataType="AnsiString" ColumnType="FixedWidth" CodePage="1252" />
<Column Name="TERM" Length="04" DataType="AnsiString" ColumnType="FixedWidth" CodePage="1252" />
<!--
ad nauseum
-->
<Column Name="RPRTD_PU_PCS" Length="5" DataType="AnsiString" ColumnType="FixedWidth" CodePage="1252" />
</Columns>
</FlatFileFormat>
</FileFormats>
<Connections>
<FlatFileConnection
Name="FF Pickup"
FileFormat="FFF Pickup"
FilePath="C:\ssisdata\Operations\Input\Pickup Report Pickups.txt"
CreateInProject="false"
/>
</Connections>
<Packages>
<Package Name="PickupLoad" ConstraintMode="Linear" ProtectionLevel="DontSaveSensitive">
<Tasks>
<Dataflow Name="DFT Load Pickups" >
<Transformations>
<FlatFileSource
Name="OLE_SRC Pickup"
ConnectionName="FF Pickup"
RetainNulls="true">
</FlatFileSource>
</Transformations>
</Dataflow>
</Tasks>
</Package>
</Packages>哦,还有来自所以的一个类似的问题,还有一个令人不安的相似答案。希望在重写这个答案之前,我已经看过斯金纳的评论了。
https://dba.stackexchange.com/questions/118290
复制相似问题