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