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 命令并使用 CONVERT
或 CAST
。如果 SSIS 仍然因为元数据给你一个错误。以下是您可以解决的方法。
-
打开高级编辑器。
在输入和输出属性下,展开源输出。
扩展输出列
选择导致问题的列。
转到数据类型属性并将数据类型更改为所需的类型 DT_STR、DT_Text 等。
【讨论】:
这救了我!谢谢 在哪里可以找到 SSIS 包的高级编辑器? @PatrickSchomburg - 在“数据流”任务中,从“其他源”中拖动 ODBC 源并右键单击该源。您会找到高级编辑器。【参考方案5】:如果一切都从上面失败了。创建一个表变量并将数据插入其中。然后选择所有记录作为源。在脚本中使用 SET NOCOUNT ON。
【讨论】:
【参考方案6】:Oracle 数据类型 VARCHAR2
似乎等同于 SQL Server 中的 NVARCHAR
或 SSIS 中的 DT_WSTR
。 Reference
您必须使用 SQL Server 中的数据转换转换,或CAST
或CONVERT
函数进行转换。
【讨论】:
【参考方案7】:如果包在一台机器上工作而在另一台机器上不工作;尝试将 NLS_LANG 设置为正确的语言、区域和字符集并测试包。
[Command Prompt]> set NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
【讨论】:
【参考方案8】:在 oledb 源 ->高级编辑器选项->输入/输出列->输出列->选择 RESOURCE_NAME 列并将数据类型更改为 DT_WSTR 和长度也可以根据需要更改
【讨论】:
以上是关于SSIS 包:在 unicode 和非 unicode 字符串数据类型之间转换的主要内容,如果未能解决你的问题,请参考以下文章
SSIS - 比较文本文件和非oledb连接以提供匹配和不匹配的输出