SSIS数据源数据类型

时间:2013-07-17 01:43:40

标签: ssis sql-server-2012 oledb informix data-conversion

我正在创建一套软件包,用于将运行Informix IDS 11.7的ERP系统中的数据导入SQL Server(2012)。

使用SSIS导入此数据我遇到了一个问题。我可以通过两种方式访问​​数据,使用ODBC连接和ADO.NET数据源,或使用OLEDB连接和提供程序。

使用ODBC大约慢3倍(保守地!),所以我很自然地希望远离它。

但问题是,当我使用OLEDB时,数据源报告错误的数据类型。

服务器上的NVARCHAR数据类型被报告为SSIS的VARCHAR(DT_STR)。这导致导入数据时出现问题,因为任何进入的unicode数据都会导致程序包失败。这里没有机会进行数据转换,当数据到达数据源组件时,包失败。我可以将组件设置为忽略这些错误,它会正常运行,但缺少数据,这是完全不可接受的。

我尝试在setnet32中设置DB_LOCALE和CLIENT_LOCAL,没有任何效果。

当您创建OLEDB数据源时,它会抱怨无法找到默认代码页,因此您必须将属性设置为“AlwyasUseDefaultCodePage”为true才能使该警告消失,但是设置默认代码页似乎并没有真正改变它的行为,即使我将代码页设置为65001,它仍然试图将这些数据作为VARCHAR。

所以,我的问题是,如何让Informix的OLEDB驱动程序正常工作,或者设置/强制SSIS认为这些数据实际上是DT_WSTR而不是DT_STR?

谢谢!

1 个答案:

答案 0 :(得分:2)

所以,总结一下工作所需的步骤(至少为了后人的缘故)。

设置OLEDB连接时,需要添加2个参数 -

RSASWS=TRUE;
UNICODE=TRUE;

这两个参数未显示在连接的GUI中,至少使用Informix 4.1驱动程序。

要添加这些内容,您需要修改连接的“ConnectionString”属性,将这两个属性添加到连接字符串的末尾。请注意,每次打开连接GUI时都会覆盖此属性。每次进入此界面后,您都需要确保手动修改连接字符串。

设置连接字符串的另一个选项是使用变量(或SQL 2012上的SSIS中的参数),因此任何自动对连接字符串进行的更改都将在运行时更正(它们实际上会在设计时更正)使用参数)。

我在这个数据源中找到的最后一个警告似乎是用空格填充nvarchar,就像它们是nchar一样。这可能是我的源数据的一个问题,但要检查你是否设置了它,你可能需要添加一个修剪步骤。