首页 > 解决方案 > SSIS 使用 UTF-8 将 OLEDB 源导出到平面文件

问题描述

我正在尝试将 OLEDB 源(从存储过程)导出到 UTF-8 平面文件,但出现以下错误:

[平面文件目标 [2]]

错误:数据转换失败。列“名称”的数据转换返回状态值 4 和状态文本“文本被截断或一个或多个字符在目标代码页中不匹配。”。

name 列在存储过程中定义为nvarchar(30).

在 OLEDB 源的高级编辑器中,我将 AlwaysUseDefaultCodePage 设置为 true,并将 DefaultCodePage 设置为 65001。

在外部列和输入列的平面文件的高级编辑器中,数据类型是长度为 30 的 Unicode 字符串 [DT-WSTR]。

平面文件的连接管理器未选中 Unicode 复选框,代码页为:65001 (UTF-8)。

我现在很难过,任何帮助将不胜感激。

谢谢,大卫

编辑:

我将错误和截断重定向添加到平面文件目标,但没有发送到文件。

此外,当我在 OLE DB 源上有一个数据查看器时,它会显示所有记录。

目的地的数据查看器还显示所有记录。两个查看器中的名称长度均为 30 个字符(来自 Excel)。

标签: sql-serverutf-8ssis

解决方案


我放弃了让数据流正常工作,而是编写了一个 C# 脚本任务。

通过选中平面文件连接管理器中的 Unicode 复选框,我更改了数据流的输出以生成 Unicode 文件。

然后,我让新的 C# 脚本一次读取 Unicode 文件一行,并使用 Encoding.UTF8 在行变量末尾添加一个新行字符将该行输出到另一个平面文件。

创建新文件后,我删除输入文件并将新文件重命名为与原始输入文件相同的路径和名称。这也在 C# 脚本中完成。


推荐阅读