在 SSIS 中將 Unicode 字串作為 Shift-JIS 字元代碼輸出到文字檔
導致錯誤的模式
假定 SQL Server 上的表的 nvarchar 列具有 Shift-JIS 中不允許的字串。 順便問一下,如果將這些字元放在 varchar 列中,則右側「列移位」列中不允許的字元是什麼? 取代為 。
合併流以從前面的表中讀取數據並列印到文本檔中,如圖 SSIS 所示。
應列印為 CSV 檔。 由於 CSV 檔通常使用 Shift-JIS,因此將文字檔中的字元代碼設置為 Shift-JIS。
使用此設定運行時,輸出計時將失敗。
您會收到類似於以下內容的錯誤訊息:
輸出的檔也會在錯誤發生時在半途而廢的地方中斷。
如果嘗試按原樣輸出,則會失敗,因此請在嘗試過程中包括「數據轉換」。
將數據類型從“DT_WSTR”轉換為“DT_STR”,以便可以輸出到Shift-JIS。
但是,如果再次運行它,它將失敗。 SSIS 會完全錯誤地處理缺少數據的隱式操作。 如果要在 SSIS 上執行文字類型化操作,則必須顯式指定所有字元的字元替換。
對策
從資料庫中的表載入時,可以使用 SQL 更改文字類型。 SQL 是 SQL 伺服器的引擎,而不是 SSIS,因此您可以運行它,而不會出錯。 順便提一下,Shift-JIS 中不允許的所有字元都是“?” 轉換為 。 這是 SQL 伺服器端的規範。 即使不是 SSIS,使用 SQL Server 的系統的總體結果也類似。
打開 ADO NET 源並將資料存取模式更改為 SQL 命令。 現在,您可以輸入 SQL,請編寫一個 Select 語句,該語句從資料庫中檢索數據。 然後,使用強制轉換將包含 Shift-JIS 中不可用的字元的文字轉換為 varchar。
當數據流經 SSIS 時,Shift-JIS 中已有的字元已被刪除,您可以按原樣處理它們。
您可以看到文字已成功寫入 CSV。 此外,Shift-JIS 中不允許的所有字元都是“?” 您可以看到它已被轉換為 。