2010-03-11 73 views
0

我希望能夠使用我的XML配置文件配置我的Flat File Connection Manager使用的'RowDelimiter'和'HeaderRowDelimiter'值。SSIS - 如何從XML配置文件設置'RowDelimiter'和'HeaderRowDelimiter'?

我已經很多次使用XML配置文件與SSIS包多次沒有任何問題,所以我知道我的配置文件格式正確,正在被我的包拾起,但包似乎並沒有改變在配置文件中指定的'RowDelimiter'值。

基本上我希望能夠配置使用{CR} {LF}行結束符或{LF}終止符,但我無法理解我在做什麼錯誤。無論我嘗試配置什麼值,在設計時給出的值似乎都優先。我也試過在設計時沒有爲分隔符指定任何內容,但是由於它忽略了平面文件中的實際終止符(即,它似乎完全忽略了我的配置設置並嘗試使用完全相同的內容在設計時指定)。

我的配置項如下:

<Configuration ConfiguredType="Property" Path="\Package.Connections[Connection 1].Properties[HeaderRowDelimiter]" ValueType="String" xml:space="preserve"> 
<ConfiguredValue>_x000D__x000A_</ConfiguredValue> </Configuration> 

顯然這是推動我瘋了,因爲它應該是如此簡單和直接,因此任何幫助將是非常非常感謝!

Pat。

回答

1

使用SSIS 2008 R2,我可以使用表達式更改行分隔符。訣竅是使用值「{CR} {LF}」resp。 「{LF}」用於設置所需的行分隔符。

1

我嚴重地出現了同樣的問題。我花了不止一天的時間把頭撞過去。這是我發現的。儘管配置文件允許您指定HeaderRowDelimiter,但每列的分隔符仍然存儲在程序包本身中,並且這些值不可配置!問題是,特別是與最後一列的分隔符被保存在包裝這樣的代碼:

<DTS:FlatFileColumn><DTS:Property DTS:Name="ColumnType">Delimited</DTS:Property><DTS:Property DTS:Name="ColumnDelimiter" xml:space="preserve">_x000A_</DTS:Property><DTS:Property DTS:Name="ColumnWidth">0</DTS:Property><DTS:Property DTS:Name="MaximumWidth">50</DTS:Property><DTS:Property DTS:Name="DataType">129</DTS:Property><DTS:Property DTS:Name="DataPrecision">0</DTS:Property><DTS:Property DTS:Name="DataScale">0</DTS:Property><DTS:Property DTS:Name="TextQualified">-1</DTS:Property><DTS:Property DTS:Name="ObjectName">ExpirationDate</DTS:Property><DTS:Property DTS:Name="DTSID">{C83-8C75-43C7-B8C8-B234F7C645BA}</DTS:Property><DTS:Property DTS:Name="Description"></DTS:Property><DTS:Property DTS:Name="CreationName"></DTS:Property></DTS:FlatFileColumn> 

注意最後一列的ColumnDelimiter有着怎樣x000A的價值。這是因爲我在設計時配置平面文件連接的文件將{LF}作爲行分隔符。如果我指向一個具有{CR} {LF}行分隔符的文件,那麼最後一列的ColumnDelimiter將爲x000D _x000A_並且這些值不會與配置文件中的值過度匹配。
在我的情況下,如果我以包含{CR} {LF}作爲行分隔符的文件包的運行時文件包含{LF}分隔符的文件包根本沒有加載到表中(顯然,因爲它無法找到表示行結束的{CR} {LF})。但是,如果我將文件包設計爲{LF}分隔符,那麼在運行時將{CR} {LF]分隔符處理文件,但將{CR}附加到文件的最後一個字段。在我的情況下,它是一個日期字段,最後{CR}字符使其完全失效。剛剛嘗試這一點:

print isdate('1/1/2010' + char(13)) 

您可以使用替換()和替換「」 CHAR(13),但這意味着增加,這將在情況下停止工作讓說另一列被添加到烴源實例特定SQL任務文件。

解決方案:我最終在設計時用{LF}分隔符對文件進行了深思熟慮,並在帶有表達式的平面文件源之後添加了派生列轉換任務,以便在運行時文件{CR} { LF}分隔符:

REPLACE(ExpirationDate,"\r","")