我正在开发一个SSIS包,用于从Oracle 11g数据库中的表中提取数据,并将其加载到Server 2014数据库中的表中。
Oracle数据库中的表具有定义为VARCHAR2 (单字节/代码页8859-1)的字符串列;Server数据库中的表有定义为VARCHAR (单字节)的字符串列。
但是,当我将OLE DB源代码/ ADO .NET源代码添加到SSIS包并将其配置为从Oracle中的表中选择列时,外部列(高级编辑器)将字符串列显示为DT_WSTR (Unicode)。
此甲骨文 (请参阅“Oracle支持工作方式”一节)建议“当客户端字符集不是服务器字符集的超集或数据库字符集是多字节字符集时,OraOLEDB自动启用Unicode模式。”
如何让OraOLEDB提供程序/ single数据源将源中的字符串列公开为单个字节?
我试过的
约束条件
环境配置
Windows客户端
SSIS包/数据流任务/ OLE DB数据源
LocaleID =英语(联合王国)
客户端会话连接信息
SELECT * FROM V$SESSION_CONNECT_INFOOracle服务器
SELECT * FROM SYS.NLS_DATABASE_PARAMETERS发布于 2016-08-23 13:04:34
正如您已经注意到的,当客户端的字符集不是数据库的超集时,Oracle使用"unicode mode“,数据库的字符集绝对是WE8ISO8859P1。你当事人的字符集还没有确定。客户端会话连接信息不是可靠的来源。
环境变量NLS_LANG重写注册表设置(如果有的话)。要确保OraOLEDB客户端使用所需的NLS_LANG值,请确保执行SSIS包的用户具有该环境变量集。您可以通过编辑HKEY_USERS\<that user's id>\Environment\NLS_LANG来实现这一点。我建议从使其与数据库WE8ISO8859P1相等开始,以排除WE8MSWIN1252不被视为Oracle的超集。
关于这的优秀文章。
发布于 2016-05-27 17:32:05
使用高级编辑器(右键单击组件将其显示为选项),您可以手动设置列的输出类型。见以下条款:
http://www.sqlservergeeks.com/sql-server-data-type-conversion-options-in-ssis/
https://stackoverflow.com/questions/37279041
复制相似问题