2013-07-17 333 views
4

我正在創建一套程序包,以將運行在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?

謝謝!

+0

所以我設法讓OLEDB提供程序現在報告正確的數據類型到SSIS。您需要添加'RSASWS = TRUE;'到連接字符串,但因爲它不作爲連接的屬性公開,所以需要將它設置爲表達式或參數,以便連接始終正確。 – Cameron

+0

不幸的是,這並不能真正解決問題。 現在我正在讓我的列報告DT_WSTR的正確數據類型,但該組件仍然返回錯誤「由於數據可能丟失,無法轉換該值」。我不確定在這裏做什麼,沒有可能發生的數據轉換,這是一個unicode字符串。由於它在數據源處出錯,因此甚至沒有機會插入數據轉換任務來解決任何問題。 – Cameron

+1

右,想通了。您還需要設置參數UNICODE = TRUE;到連接字符串,就像上面一樣。所以那些連接字符串中的參數應該將任何Informix整理爲SSIS的unicode問題。反正使用OLEDB。 – Cameron

回答

1

因此,總結爲達到這個目標所需的步驟(至少爲了後代)。

在設置您的OLEDB連接,您需要添加2個參數 -

RSASWS=TRUE; 
UNICODE=TRUE; 

這兩個參數是不是在GUI進行連接,至少用Informix 4.1驅動程序中。

要添加這些,需要修改連接的「ConnectionString」屬性,將這兩個屬性添加到連接字符串的末尾。請注意,每次打開連接GUI時都會覆蓋此屬性。您需要確保每次進入該界面後手動修改連接字符串。

設置連接字符串的其他選項是使用變量(或SQL 2012中的SSIS中的參數),因此對連接字符串自動進行的任何更改都將在運行時更正(它們實際上在設計時得到糾正當使用參數時)。

我用這個數據源發現的最後一個警告,似乎是用空格填充nvarchar,好像它們是nchar的。雖然這可能是我的源數據的問題,但要檢查您是否設置此項,您可能需要添加修整步驟。