SSIS génère une chaîne Unicode sous forme de code de caractère Shift-JIS dans un fichier texte

Date de création de la page :

Modèles qui entraînent des erreurs

Supposons qu’une colonne de type nvarchar dans une table sur SQL Server possède une chaîne qui ne peut pas être utilisée dans Shift-JIS. Soit dit en passant, si vous mettez ces caractères dans la colonne varchar, il y a des caractères qui ne peuvent pas être utilisés, comme la colonne « ColumnShiftJis » à droite. Remplacez-le.

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

Sur SSIS, le flux est configuré pour lire les données de la table précédente comme indiqué dans la figure et les sortir dans un fichier texte.

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

Supposons que vous souhaitiez le sortir sous forme de fichier CSV. Étant donné que Shift-JIS est souvent utilisé dans les fichiers CSV, définissez le codage de caractères du fichier texte sur Shift-JIS.

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

Si vous exécutez avec ce paramètre, une erreur se produira au moment de la sortie.

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

Un message d’erreur semblable au suivant s’affiche :

エラー内容

Le fichier de sortie sera également interrompu à mi-chemin lorsque l’erreur s’est produite.

出力されたテキスト

Si vous essayez de sortir tel quel, ce sera une erreur, alors essayez d’incorporer la « conversion de données » au milieu.

データ変換 追加

Convertissez le type de données de « DT_WSTR » en « DT_STR » et transformez-le en un formulaire qui peut être envoyé à Shift-JIS.

「DT_WSTR」から「DT_STR」に変換

Cependant, si vous exécutez également cela, vous obtiendrez une erreur. En effet, SSIS échoue strictement au traitement implicite qui entraîne l’absence de données. Si vous souhaitez que SSIS effectue un traitement de texte détypé, vous devez spécifier explicitement la substitution de caractères pour tous les caractères.

データ変換エラー

Solutions de contournement

Il existe un moyen de modifier le type de texte à l’aide de SQL lors de la lecture à partir d’une table dans une base de données. S’il s’agit de SQL, c’est le moteur SQL Server qui l’exécute, et non SSIS, afin qu’il puisse s’exécuter sans erreur. Au fait, tous les caractères qui ne peuvent pas être utilisés dans Shift-JIS sont « ? » Converti en : Il s’agit d’une spécification côté SQL Server. Même s’il ne s’agit pas de SSIS, le résultat est similaire pour tous les systèmes qui utilisent SQL Server.

Ouvrez ADO NET Translator et remplacez le mode d’accès aux données par Commande SQL. Maintenant que vous pouvez entrer DANS SQL, écrivez une instruction Select pour récupérer les données de la base de données. Le texte qui contient des caractères qui ne peuvent pas être utilisés dans Shift-JIS est converti de force en varchar à l’aide de cast.

SQL で varchar に変換

Étant donné que les caractères qui ne peuvent pas être utilisés dans Shift-JIS ont déjà été supprimés au moment de l’acheminement des données vers SSIS, le traitement peut être transmis tel quel.

処理成功

Vous pouvez voir que le texte est écrit avec succès dans le fichier CSV. En outre, tous les caractères qui ne peuvent pas être utilisés dans Shift-JIS sont « ? » Vous pouvez voir qu’il a été converti en:

出力されたテキスト