【问题标题】:SSIS Access to SQL. Binding error: The binding status was "DT_NTEXT"SSIS 访问 SQL。绑定错误:绑定状态为“DT_NTEXT”
【发布时间】:2021-09-12 03:08:29
【问题描述】:

我正在尝试从以前的同事那里继承一个 SSIS 包来执行。该包从 Access 数据库中提取数据,然后将数据放入 SQL 数据库中。

其中一个字段,我们称之为“建议”,在 Access 数据库中属于 “备忘录” 类型。 SQL 输出数据库中的列的类型为 varchar(max)。

错误:数据流任务中的 0xC002F446,OLE DB 目标 [218]:为“建议”列设置绑定时出错。绑定状态为“DT_NTEXT”。数据流列类型为“DBBINDSTATUS_UNSUPPORTEDCONVERSION”。此提供程序可能不支持从“DBTYPE_IUNKNOWN”的 OLE DB 类型转换为“DBTYPE_WVARCHAR”的目标列类型。

更让我感到困惑的是 memo 类型的不同列,它也被处理为 DT_NTEXT,并且也被放入 varchar(max) SQL 数据库中的数据类型,不会引发错误消息。我尝试了许多转换对象类型,但尚未成功执行该包。

【问题讨论】:

  • sql中推荐的数据类型是varchar(max)吗?我很惊讶备忘录栏没有抛出 unicode 转换错误。
  • 是的。刚刚意识到我的原始帖子包含针对不同列的类似错误。很抱歉有任何混淆。
  • 因此,当我尝试复制此问题时,我有一个 ntext 列进入 oledb 目标的 varchar(max) 列 - 但它抛出无法在 unicode 和非 unicode 之间转换的错误类型。你确定你的 sql 表是 varchar(max) 吗?可以尝试将ntext列转换为文本或将sql表转换为nvarchar(max)吗?
  • 发现同一包的不同版本,其中向长度为 510 的 DT_WSTR 的转换由数据转换对象完成。这种变化似乎执行得很好,但我不完全确定为什么。

标签: sql-server ms-access visual-studio-2012 ssis


【解决方案1】:

通过执行以下操作,我能够重现此错误:

  • 将目标列的数据类型更改为nvarchar(100)
  • 使来自数据流的传入行为ntext,长度大于100

这会导致目标列溢出并抛出您在问题中所述的错误:

Error: 0xC002F446 at Data Flow Task, OLE DB Destination [2]: An error occurred while setting up a 
binding for the "myCol" column. The binding status was "DT_NTEXT". The data flow column type is 
"DBBINDSTATUS_UNSUPPORTEDCONVERSION". The conversion from the OLE DB type of "DBTYPE_IUNKNOWN" to  
the destination column type of "DBTYPE_WVARCHAR" might not be supported by this provider.

所以我认为发生在你身上的是ntext 列的值超过了nvarchar(max) 导致它溢出。

在之前的版本中,您将列转换为dt_wstr(510) - 这是因为您可能会将 ntext 值截断为适合目标列的大小。如果这些值确实适合该大小,则将其作为解决方案。如果您的源值可以更大,则将 SQL 中的目标列更改为适合的值。这可以是ntext,但已被弃用,因此建议将其更改为varbinary(max)

【讨论】:

    【解决方案2】:
    1. 在 SQL nvarchar(100) 中更改数据类型
    2. 使用派生列编写将备忘录转换为 unicode 的表达式 (DT_WSTR,4000)((DT_NTEXT)消息)

    1. 使用新的派生列名映射

    【讨论】:

    • 这适用于我在 Azure Datawarehouse 目标表的类似场景中
    【解决方案3】:

    在我的情况下,我应该将“文本”转移到“nvarchar”,但原始数据包含小数据。 我可以通过将连接方式从 OLE 更改为 ADO .net 来解决这个问题。

    【讨论】:

      【解决方案4】:

      这个问题是由于数据中的 '(撇号)。删除带有撇号的记录示例:community's instead type communitys

      【讨论】:

        【解决方案5】:

        从 MySql 数据库导入时收到此错误消息。

        解决方法是将列从 nvarchar(500) 更改为 nvarchar(Max)。

        【讨论】:

          猜你喜欢
          • 2023-03-15
          • 2015-12-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-28
          • 1970-01-01
          • 2023-03-14
          • 1970-01-01
          相关资源
          最近更新 更多