我嚴重地出現了同樣的問題。我花了不止一天的時間把頭撞過去。這是我發現的。儘管配置文件允許您指定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","")