在 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 中不允许的所有字符都是“?” 您可以看到它已被转换为 。

出力されたテキスト