在 SSIS 中將 Unicode 字串作為 Shift-JIS 字元代碼輸出到文字檔

頁面創建日期 :

導致錯誤的模式

假定 SQL Server 上的表的 nvarchar 列具有 Shift-JIS 中不允許的字串。 順便問一下,如果將這些字元放在 varchar 列中,則右側「列移位」列中不允許的字元是什麼? 取代為 。

Unicode 文字をデータベースのテーブルに入れる

合併流以從前面的表中讀取數據並列印到文本檔中,如圖 SSIS 所示。

テキストファイルへ出力する様にフローを構築

應列印為 CSV 檔。 由於 CSV 檔通常使用 Shift-JIS,因此將文字檔中的字元代碼設置為 Shift-JIS。

文字コードを Shift-JIS に設定

使用此設定運行時,輸出計時將失敗。

テキストファイル書き込み時にエラー

您會收到類似於以下內容的錯誤訊息:

エラー内容

輸出的檔也會在錯誤發生時在半途而廢的地方中斷。

出力されたテキスト

如果嘗試按原樣輸出,則會失敗,因此請在嘗試過程中包括「數據轉換」。

データ変換 追加

將數據類型從“DT_WSTR”轉換為“DT_STR”,以便可以輸出到Shift-JIS。

「DT_WSTR」から「DT_STR」に変換

但是,如果再次運行它,它將失敗。 SSIS 會完全錯誤地處理缺少數據的隱式操作。 如果要在 SSIS 上執行文字類型化操作,則必須顯式指定所有字元的字元替換。

データ変換エラー

對策

從資料庫中的表載入時,可以使用 SQL 更改文字類型。 SQL 是 SQL 伺服器的引擎,而不是 SSIS,因此您可以運行它,而不會出錯。 順便提一下,Shift-JIS 中不允許的所有字元都是“?” 轉換為 。 這是 SQL 伺服器端的規範。 即使不是 SSIS,使用 SQL Server 的系統的總體結果也類似。

打開 ADO NET 源並將資料存取模式更改為 SQL 命令。 現在,您可以輸入 SQL,請編寫一個 Select 語句,該語句從資料庫中檢索數據。 然後,使用強制轉換將包含 Shift-JIS 中不可用的字元的文字轉換為 varchar。

SQL で varchar に変換

當數據流經 SSIS 時,Shift-JIS 中已有的字元已被刪除,您可以按原樣處理它們。

処理成功

您可以看到文字已成功寫入 CSV。 此外,Shift-JIS 中不允許的所有字元都是“?” 您可以看到它已被轉換為 。

出力されたテキスト