oracle – SSIS将Varchar2转换为DT_STR

我们有一个SSIS包,将数据从Oracle数据库下载到SQL Server数据仓库.对于这个数据仓库,建立了几个环境;开发,测试和生产.开发和测试共享一台机器,Prod是独立的.

当在PROD机器上运行SSIS包时,它会将我们的Oracle源数据库中的Varchar2列以DT_WSTR格式下载到MSSQL,并将其保存到NVarchar列. I.E.涉及的所有步骤都支持Unicode.

当在DEV / Test框上针对相同的源数据库运行相同的包时,它以某种方式将外部列视为Varchar,将其导出到数据流中的DT_STR并拒绝将其存储在NVarchar列中.

所有操作系统都是Win2K8r2,MSSQL 2008 64位.程序包以32位模式运行,从BIDS或SQL Agent运行时可以看到相同的行为.

有人在乎为什么要猜?我已经看到了禁用验证外部元数据的建议(https://stackoverflow.com/a/18383598/2903056),但这不是我们情况的实用建议.

最佳答案 我知道一个老问题,但似乎仍然有用.而且由于我在过去的3个月里找不到合适的答案,所以我现在认为发布我的研究结果的时间也不错.

我有同样的好奇行为,最终能够解决它.
我的布局看起来像这样:

> Windows 2003 Server上的Oracle 10g R2数据库(我们称之为ORA)
>使用Windows 8,Visual Studio 2012 SSDT,Sql Express 2012的Dev机器,
ODT 12.1.0.21(让我们称之为DEV)
> Windows 2012 Server上的Sql Server 2012,Oracle Client 11.2(允许调用TEST)

DEV和TEST都连接到ORA. DEV将VARCHAR2列报告为DT_WSTR,而TEST则坚持认为它们是DT_STR.

然后我在TEST上安装了ODT 12.1.0.21,问题解决了.值得注意的是,我在安装过程中使用了“机器范围”选项.我不确定有多大影响.

Oracle OleDb提供程序在不同版本的客户端组件中返回的数据类型似乎有所不同.

点赞