【发布时间】:2013-07-17 01:43:39
【问题描述】:
我正在创建一套包,以将数据从我们在 Informix IDS 11.7 上运行的 ERP 系统导入 SQL Server (2012)。
使用 SSIS 导入这些数据我遇到了一个问题。我可以通过 2 种方式访问数据,使用 ODBC 连接和 ADO.NET 数据源,或者使用 OLEDB 连接和提供程序。
使用 ODBC 大约慢 3 倍(保守地说!),所以我自然很想摆脱这种情况。
但是问题是,当我使用 OLEDB 时,数据源报告了错误的数据类型。
服务器上的 NVARCHAR 数据类型将作为 VARCHAR (DT_STR) 报告给 SSIS。这在导入数据时会导致问题,因为任何传入的 unicode 数据都会导致包失败。这里没有机会进行数据转换,当数据到达数据源组件时,包会失败。我可以将组件设置为忽略这些错误,它会运行良好,但缺少数据,这是完全不能接受的。
我试过在 setnet32 中设置 DB_LOCALE 和 CLIENT_LOCAL,没有任何效果。
当您创建 OLEDB 数据源时,它会抱怨无法找到默认代码页,因此您必须将属性设置为“AlwyasUseDefaultCodePage”以使该警告消失,但设置默认代码页似乎并没有真正改变它的行为,即使我将代码页设置为 65001 之类的东西,它仍然试图将这些数据作为 VARCHAR 传递。
所以,我的问题是,我怎样才能让 Informix 的 OLEDB 驱动程序正常工作,或者设置/强制 SSIS 认为该数据实际上是 DT_WSTR,而不是 DT_STR?
谢谢!
【问题讨论】:
-
所以我设法让 OLEDB 提供程序现在向 SSIS 报告正确的数据类型。您需要添加 'RSASWS=TRUE;'到连接字符串,但由于它没有作为连接的属性公开,因此您需要将其设置为表达式或参数,以便连接始终正确。
-
不幸的是,这并不能真正解决问题。现在我的列报告了正确的 DT_WSTR 数据类型,但是该组件仍然返回错误“由于潜在的数据丢失,无法转换值。”。我不确定在这里做什么,这里没有数据转换,它一直是一个 unicode 字符串。因为是数据源出错,所以根本没有机会插入数据转换任务来解决任何问题。
-
Righto,想通了。您还需要设置参数 UNICODE=TRUE;到连接字符串,就像上面一样。因此,连接字符串中的那些参数应该解决任何 Informix 到 SSIS、unicode 问题。无论如何都使用 OLEDB。
-
请自行回答您的问题,并将其作为正确答案接受。
-
您能否将 NVARCHAR 转换为固定长度的 CHAR 或其他与服务器兼容的续集数据类型?
标签: ssis sql-server-2012 oledb informix data-conversion