SSIS 包:在 unicode 和非 unicode 字符串数据类型之间转换

Posted

技术标签:

【中文标题】SSIS 包:在 unicode 和非 unicode 字符串数据类型之间转换【英文标题】:SSIS Package: convert between unicode and non-unicode string data types 【发布时间】:2013-07-13 18:54:39 【问题描述】:

我正在连接到 Oracle 数据库并且连接正常,但我在某些列中收到以下错误:

Description: Column "RESOURCE_NAME" cannot convert between unicode 
and non-unicode string data types.

RESOURCE_NAME 的值:

对于甲骨文:VARCHAR2(200 BYTE) 对于 SQL Server:VARCHAR(200 BYTE)

我可以毫无问题地通过 Oracle SQL Developer 连接到 Oracle DB。另外,我有 SSIS 包设置Run64BitRuntime = False

【问题讨论】:

【参考方案1】:

即使使用 SQL Server 而不是 Oracle,我也遇到了非常相似的问题。在我的例子中,我使用平面文件作为数据源,所以我只是进入平面文件连接管理器并手动将列类型更改为 Unicode 字符串:

我不知道这是否能解决您的问题,但它帮助了我 - 希望其他人也能得到帮助。 (我受到this previous answer to this question BTW 的启发而尝试这样做,只是为了在应得的地方给予信任)。

【讨论】:

【参考方案2】:

您只需双击数据流中的“数据转换”块,然后将每个项目更改为:“Unicode 字符串 [DT_WSTR]”

作品

【讨论】:

【参考方案3】:

最简单的方法是在记事本中打开 SSIS 包(dtsx 文件)并全局查找和替换 validateExternalMetadata="True"的所有实例> 使用 validateExternalMetadata="False"

注意:我们在通过 SSIS 连接到 Linux 上的 Oracle 11g 数据库时遇到了这个问题。

【讨论】:

我相信.dtsx 是正确的。在您触摸文件之前对其进行备份。【参考方案4】:

您可以在 SSIS 中使用 SQL 命令并使用 CONVERTCAST。如果 SSIS 仍然因为元数据给你一个错误。以下是您可以解决的方法。

    打开高级编辑器。 在输入和输出属性下,展开源输出。 扩展输出列 选择导致问题的列。 转到数据类型属性并将数据类型更改为所需的类型 DT_STR、DT_Text 等。

【讨论】:

这救了我!谢谢 在哪里可以找到 SSIS 包的高级编辑器? @PatrickSchomburg - 在“数据流”任务中,从“其他源”中拖动 ODBC 源并右键单击该源。您会找到高级编辑器。【参考方案5】:

如果一切都从上面失败了。创建一个表变量并将数据插入其中。然后选择所有记录作为源。在脚本中使用 SET NOCOUNT ON。

【讨论】:

【参考方案6】:

Oracle 数据类型 VARCHAR2 似乎等同于 SQL Server 中的 NVARCHAR 或 SSIS 中的 DT_WSTR。 Reference

您必须使用 SQL Server 中的数据转换转换,或CASTCONVERT 函数进行转换。

【讨论】:

【参考方案7】:

如果包在一台机器上工作而在另一台机器上不工作;尝试将 NLS_LANG 设置为正确的语言、区域和字符集并测试包。

[Command Prompt]> set NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1

【讨论】:

【参考方案8】:

在 oledb 源 ->高级编辑器选项->输入/输出列->输出列->选择 RESOURCE_NAME 列并将数据类型更改为 DT_WSTR 和长度也可以根据需要更改

【讨论】:

以上是关于SSIS 包:在 unicode 和非 unicode 字符串数据类型之间转换的主要内容,如果未能解决你的问题,请参考以下文章

SSIS在Unicode和非Unicode错误之间转换

SSIS包写入CRM 2011数据类型错误

组件的 SSIS 包外部列不同步

SSIS - 比较文本文件和非oledb连接以提供匹配和不匹配的输出

在SQL数据类型中,Unicode数据类型和非Unicode数据类型具体有啥区别?

unicode编码详解,一看就懂