在DTS软件包中,我们将数据从Oracle的列VARCHAR2(50 CHAR)
(Unicode)复制到Sybase列VARCHAR(50)
(Nonunicode)。来源是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目标
答案 0 :(得分:0)
根据您的评论,您似乎正在使用OLEDB Provider连接到Sybase。连接Sybase的首选方法是使用ADO.Net提供程序,而不是OLEDB。
通过在网络上进行少量搜索,您可以意识到Sybase OLEDB提供程序在SSIS中使用时可能会引起多个问题,例如:
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
您可以检查以下链接:
如果ADO.Net不起作用,请检查该问题是否不是由Sybase目标中不支持的某些Unicode字符引起的。
尝试添加脚本组件,添加DT_STR
类型的Output列,并使用以下代码:
Row.outColumn = Encoding.GetEncoding("Windows-1250").GetString(Encoding.GetEncoding("Windows-1250").GetBytes(Row.inColumn))
然后将outColumn
映射到目的地。