我正在創建一套程序包,以將運行在Informix IDS 11.7上的ERP系統中的數據導入到SQL Server(2012)中。SSIS數據源數據類型
使用SSIS導入這些數據我遇到過一個問題。我可以通過兩種方式訪問數據,使用ODBC連接和ADO.NET數據源,或使用OLEDB連接和提供程序。
使用ODBC大約慢了3倍(保守地!),所以很自然地我很想離開它。
但問題是,當我使用OLEDB數據源報告錯誤的數據類型。
服務器上的NVARCHAR數據類型將作爲VARCHAR(DT_STR)報告給SSIS。這導致導入數據時出現問題,因爲任何進入的unicode數據都會導致程序包失敗。在這裏沒有機會進行數據轉換,當數據遇到數據源組件時,程序包失敗。我可以將組件設置爲忽略這些錯誤,並且它可以正常運行,但丟失的數據根本無法接受。
我試過在setnet32中設置DB_LOCALE和CLIENT_LOCAL,沒有任何作用。
當您創建OLEDB數據源時,它抱怨無法找到默認代碼頁,因此您必須將該屬性設置爲「AlwyasUseDefaultCodePage」爲true,以使該警告消失,但設置默認代碼頁面似乎並沒有真正改變它的行爲,但它仍然試圖將這些數據作爲VARCHAR,即使我將代碼頁設置爲65001之類。
所以,我的問題是,我怎樣才能獲得OLEDB來自Informix的驅動程序正常工作,或設置/強制SSIS認爲此數據實際上是DT_WSTR,而不是DT_STR?
謝謝!
所以我設法讓OLEDB提供程序現在報告正確的數據類型到SSIS。您需要添加'RSASWS = TRUE;'到連接字符串,但因爲它不作爲連接的屬性公開,所以需要將它設置爲表達式或參數,以便連接始終正確。 – Cameron
不幸的是,這並不能真正解決問題。 現在我正在讓我的列報告DT_WSTR的正確數據類型,但該組件仍然返回錯誤「由於數據可能丟失,無法轉換該值」。我不確定在這裏做什麼,沒有可能發生的數據轉換,這是一個unicode字符串。由於它在數據源處出錯,因此甚至沒有機會插入數據轉換任務來解決任何問題。 – Cameron
右,想通了。您還需要設置參數UNICODE = TRUE;到連接字符串,就像上面一樣。所以那些連接字符串中的參數應該將任何Informix整理爲SSIS的unicode問題。反正使用OLEDB。 – Cameron