将数据从Oracle移到Sybase-字符串问题

时间:2019-02-12 06:52:07

标签: oracle ssis oledb etl sybase

在DTS软件包中,我们将数据从Oracle的列VARCHAR2(50 CHAR)(Unicode)复制到Sybase列VARCHAR(50)(Nonunicode)。来源是Oracle DB,我们在其中从sql查询中选择数据。

下一个是数据转换,我们将数据转换为STRING[DT_STR] 50(代码页1250)。最后,将数据插入Sybase表列Varchar(50)中。但是运行后,我们仅看到空列,没有原始值。

哪里有错误?


更新1

如果我在Sybase服务器上执行SELECT @@VERSION,则会得到以下信息:

  

Adaptive Server Enterprise / 15.7 / EBF 21520 SMP SP102 / P / ia64 / HP-UX B.11.31 / ase157sp101 / 3445 / 64-bit / FBO / Sat Jul 13 05:47:31 2013

我正在使用OLEDB Provider连接到Sybase目标

1 个答案:

答案 0 :(得分:0)

使用ADO.Net代替OLEDB

根据您的评论,您似乎正在使用OLEDB Provider连接到Sybase。连接Sybase的首选方法是使用ADO.Net提供程序,而不是OLEDB。

Sybase OLEDB提供程序问题

通过在网络上进行少量搜索,您可以意识到Sybase OLEDB提供程序在SSIS中使用时可能会引起多个问题,例如:

Sybase ADO.NET

ADO.Net是从SSIS连接到sybase的正确方法。

在下面的official documentation中,他们提到:

  

Adaptive Server ADO.NET数据提供程序可以集成到SQL Server集成服务(SSIS)中,从而允许对ADO.NET数据提供程序功能的本地访问。   通过集成,您可以将Adaptive Server用作:

     
      
  • ADO.NET连接管理器
  •   
  • ADO.NET源数据流组件
  •   
  • ADO.NET目标数据流组件
  •   

official download page中,他们没有提到OLEDB提供程序,但是他们提到了ADO.NET

使用Sybase ADO.Net数据提供程序的分步指南

您可以检查以下链接:


解决方法

如果ADO.Net不起作用,请检查该问题是否不是由Sybase目标中不支持的某些Unicode字符引起的。

尝试添加脚本组件,添加DT_STR类型的Output列,并使用以下代码:

Row.outColumn = Encoding.GetEncoding("Windows-1250").GetString(Encoding.GetEncoding("Windows-1250").GetBytes(Row.inColumn))

然后将outColumn映射到目的地。