我有一個固定寬度的文件,大約有1200個字符,並且有大約300列。我正在尋找一種方法來在SSIS中創建固定寬度的數據源,而無需使用用於平面文件連接管理器的UI。有沒有辦法修改列定義而不必在SSIS中使用UI?我無法在項目中的任何位置找到數據連接的文件。如何管理SSIS中的巨型固定寬度文件?
我註定要在平面文件連接管理器中手動添加300列嗎?
我有一個固定寬度的文件,大約有1200個字符,並且有大約300列。我正在尋找一種方法來在SSIS中創建固定寬度的數據源,而無需使用用於平面文件連接管理器的UI。有沒有辦法修改列定義而不必在SSIS中使用UI?我無法在項目中的任何位置找到數據連接的文件。如何管理SSIS中的巨型固定寬度文件?
我註定要在平面文件連接管理器中手動添加300列嗎?
想到兩個選項。首先是安裝BIDSHelper並使用Create Fixed Width Columns
另一方面,@ElectricLlama提到的是使用BIML。這也需要安裝BIDS Helper,但要將.biml文件轉換爲.dtsx文件。
這應該近似創建一個包含平面文件連接管理器(具有單列)的包,並添加一個數據流使用我們的平面文件並將其連線至行數。這是你想要的近似值。只需在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>
生成的包看起來像
隨意拿起你的下巴掉在地上;)
BIDSHelper方法對我來說有一點需要檢查,但是這樣做是爲了檢查您的標題行分隔符和總行長度設置,因爲我的行被搞砸了,直到我解決了這個問題。 – Josh
如果你想用腳本不是SSIS然後使用BULK INSERT(一T-SQL命令)或BCP.EXE(一個命令行工具)。兩者都使用可能很痛苦的格式文件。或者,你可以使用這個新的BIML來自動生成你的包。恕我直言,命令/ T-SQL解決方案更容易維護,但我從未使用過BIML。 –