SSIS 数据源数据类型

标签 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 数据类型将作为 VARCHAR (DT_STR) 报告给 SSIS。这会在导入数据时出现问题,因为传入的任何 unicode 数据都会导致包失败。这里没有机会进行数据转换,当数据命中数据源组件时,包失败。我可以将组件设置为忽略这些错误,它会运行良好,但缺少数据,这是完全 Not Acceptable 。

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

当您创建 OLEDB 数据源时,它会提示无法找到默认代码页,因此您必须将该属性设置为“AlwyasUseDefaultCodePage”为 true 才能消除该警告,但是设置默认代码页不会似乎实际上改变了它的行为,它仍然试图将这些数据作为 VARCHAR 通过,即使我将代码页设置为 65001 之类的东西。

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

谢谢!

最佳答案

所以,总结一下让这个工作(至少为了后代)所需的步骤。

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

RSASWS=TRUE;
UNICODE=TRUE;

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

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

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

我在这个数据源中发现的最后一个警告似乎是用空格填充 nvarchar,就好像它们是 nchar 一样。不过,这可能是我的源数据的问题,但是如果您进行了设置,则需要检查一下,您可能需要添加一个修剪步骤。

关于SSIS 数据源数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17689757/

相关文章:

c# - 从 SSIS 脚本任务创建对自定义程序集的引用 - vb

SSIS 数据流脚本任务错误处理

sql - 需要修改查询而不使用交叉/外部应用

sql - 在 Microsoft SQL Server 中减去两个日期

c# - OLEDB 连接字符串中的 IMEX 是什么?

sql - 如何在 SQL Server 和 SSIS 中创建 "Run ID"

c# - 脚本任务填充 : SelectCommand. 连接属性尚未初始化

ssis - SSIS:我没有看到程序包配置向导

c# - 与数据库的 SSL 连接

tsql - 如何解决 OLE DB 提供程序 "Could not find installable ISAM."的 "Microsoft.ACE.OLEDB.12.0"错误