【问题标题】:SSIS Data Source Data TypesSSIS 数据源数据类型
【发布时间】: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


【解决方案1】:

所以,总结一下完成这项工作所需的步骤(至少为了后代着想)。

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

RSASWS=TRUE;
UNICODE=TRUE;

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

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

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

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

【讨论】:

    猜你喜欢
    • 2018-07-15
    • 2010-10-07
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多