在我们的DTS包中,我们将Oracle中的数据从VARCHAR2(50 CHAR)
(Unicode)列复制到Sybase列VARCHAR(50)
(Nonunicode)。 Source是Oracle DB,我们从sql查询中选择数据。
下一步是数据转换,我们将数据转换为STRING[DT_STR] 50
(代码页1250)。最后是将数据插入到Sybase表列Varchar(50)
中。但是在运行后我们只看到空列,没有原始值。
哪里可以出错?
如果我在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目标
根据您的意见,您似乎正在使用OLEDB Provider连接到Sybase。连接到Sybase的首选方法是使用ADO.Net提供程序而不是OLEDB。
通过Web上的小搜索,您可以发现Sybase OLEDB提供程序在SSIS中使用时可能会导致多个问题,例如:
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
您可以查看以下链接:
如果ADO.Net不起作用,请检查问题是否由Sybase目标中不支持的某些unicode字符引起。
尝试添加脚本组件,添加DT_STR
类型的Output列,并使用以下代码:
Row.outColumn = Encoding.GetEncoding("Windows-1250").GetString(Encoding.GetEncoding("Windows-1250").GetBytes(Row.inColumn))
并将outColumn
映射到目的地。