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

问题描述 投票:1回答:1

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

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

哪里可以出错?


Update 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目标

oracle ssis oledb etl sybase
1个回答
0
投票

Use ADO.Net instead of OLEDB

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

Sybase OLEDB提供程序问题

通过Web上的小搜索,您可以发现Sybase OLEDB提供程序在SSIS中使用时可能会导致多个问题,例如:

Sybase ADO.NET

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

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

Adaptive Server ADO.NET数据提供程序可以集成到SQL Server Integration Services(SSIS)中,允许对ADO.NET数据提供程序功能进行本机访问。 通过集成,您可以将Adaptive Server用作:

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

同样在official download page,他们没有提到OLEDB提供商,但他们提到了ADO.NET

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

您可以查看以下链接:


Workaround

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

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

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

并将outColumn映射到目的地。

© www.soinside.com 2019 - 2024. All rights reserved.