我有一个固定宽度的文件,大约 1200 个字符宽,大约有 300 多列。我正在寻找一种在 SSIS 中创建固定宽度数据源的方法,而无需使用平面文件连接管理器的 UI。有没有办法修改列定义而不必在 SSIS 中使用 UI?我在项目的任何地方都找不到数据连接的文件。
我注定要手动将 300+ 列一一添加到平面文件连接管理器中吗?
我想到了两个选择。首先是安装 BIDSHelper 并使用Create Fixed Width Columns
正如@ElectricLlama 提到的那样,另一个是使用BIML。这也需要安装 BIDS Helper,但需要将 .biml 文件转换为 .dtsx Short Walkthrough
这应该近似于使用平面文件连接管理器(具有单列)创建一个包,添加一个数据流,并在其中使用我们的平面文件并将其连接到行数。这是您想要的近似值。只需在 Columns 标记中填写 XML。
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Connections>
<FlatFileConnection
Name="FF dchess"
FileFormat="FFF dchess"
FilePath="C:\ssisdata\SO\Input\dchess.txt"
/>
</Connections>
<FileFormats>
<FlatFileFormat
Name="FFF dchess"
CodePage="1252"
RowDelimiter="CRLF"
IsUnicode="false"
FlatFileType="RaggedRight"
>
<Columns>
<Column Name="MyColumn" Length="08" DataType="AnsiString" ColumnType="FixedWidth" CodePage="1252" />
</Columns>
</FlatFileFormat>
</FileFormats>
<Packages>
<Package Name="dchess" ConstraintMode="Linear" ProtectionLevel="DontSaveSensitive">
<Connections >
<Connection ConnectionName="FF dchess" />
</Connections>
<Variables>
<Variable Name="CurrentFileName" DataType="String">C:\ssisdata\so\Input\dchess.txt</Variable>
<Variable Name="RowCountInsert" DataType="Int32">0</Variable>
</Variables>
<Tasks>
<Dataflow Name="DFT Load file" >
<Transformations>
<FlatFileSource
Name="FF_SRC dchess"
ConnectionName="FF dchess"
RetainNulls="true">
</FlatFileSource>
<RowCount Name="CNT Source" VariableName="User.RowCountInsert"></RowCount>
</Transformations>
</Dataflow>
</Tasks>
</Package>
</Packages>
</Biml>
生成的包看起来像
随意把你的下巴从地上抬起来;)