首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在SSIS中将DT_STR更改为DT_WSTR

如何在SSIS中将DT_STR更改为DT_WSTR
EN

Stack Overflow用户
提问于 2020-01-22 17:23:01
回答 1查看 3K关注 0票数 2

我们在虚拟机上有一个SSIS包(假设这是VM1),在这里我们从Oracle中提取数据。该列的Oracle中的数据类型是Varchar2,而在SSIS中,它以DT_WSTR数据类型拉出数据,并将数据存储为NVarchar列。当我从不同的虚拟机打开相同的包(假设这是VM2)时,SSIS包作为DT_STR数据类型拉出,并且由于SSIS包验证阶段的转换错误,该包失败了。当我单击Oracle源SSIS包的数据流任务中的列时,还会收到一个警告。

警告-无法从OLE DB提供程序检索列代码页信息。如果组件支持"DefaultCodePage“属性,则将使用该属性中的代码页。如果当前字符串代码页值不正确,则更改属性的值。如果组件不支持该属性,则将使用组件区域设置ID中的代码页。

我们在VM1和VM2上安装了Oracle (JDK)和Oracle。我们的VM上的操作系统是Windows 7,而SSIS包在这两个VM上都是Visual 2013。

EN

回答 1

Stack Overflow用户

发布于 2020-01-24 17:52:20

我不得不处理Oracle和SSIS之间类似的数据类型问题。由于SSIS对数据类型如此挑剔,我不得不在Oracle端找到一个实现的解决方案。

在我解释我的答案之前,我应该提到,我使用的是Microsoft的Oracle的。我强烈建议在默认连接Microsoft和Oracle提供的情况下使用这些连接器。

因此,尽管如此,我发现了两种技术,似乎可以用正确的编码方式将数据拉到一边。SSIS在从Oracle读取和转换元数据方面确实很差,但是显式地将CASTing转换为VARCHAR2 (即使该列已经是VARCHAR2 )似乎足够表明SSIS知道该列将是DT_STR类型。在我的所有Oracle任务中,我使用的是SQL,而不仅仅是选择表(这是一种最佳做法),这允许我将强制转换添加到查询中。对于VARCHAR2专栏,我会这样做:

代码语言:javascript
运行
复制
SELECT CAST("PO Number" AS VARCHAR2(30)) AS "PONumber" FROM TABLE1

这通常就足够了。但有时情况并非如此,因为Oracle允许在VARCHAR2列中出现一些奇怪的字符。即使在将列解释为[Oracle Source [2345]] Error: OCI error encountered. ORA-29275: partial multibyte character之后也会看到错误CASTing,这是由于代码页错配造成的。要更正它,可以转换字符串的字符编码,如下所示:

代码语言:javascript
运行
复制
SELECT CONVERT("PO Number",'AL32UTF8','WE8MSWIN1252') AS "PONumber" FROM TABLE1

AL32UTF8WE8MSWIN1252使用的默认(Unicode)编码,WE8MSWIN1252是Windows系统使用的默认编码(ASCII 1252)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59865117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档