SSIS访问SQL。绑定错误:绑定状态为" DT_NTEXT"

时间:2014-11-14 11:53:32

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

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

其中一个字段,我们称之为“建议”和“#39;建议'是Access数据库中' memo' 的类型。 SQL输出数据库中的列的类型为 varchar(max)。

  

错误:数据流任务中的0xC002F446,OLE DB目标[218]:为"建议"设置绑定时发生错误。柱。绑定状态为" DT_NTEXT"。数据流列类型为" DBBINDSTATUS_UNSUPPORTEDCONVERSION"。从OLE DB类型转换为" DBTYPE_IUNKNOWN"到目的地列类型" DBTYPE_WVARCHAR"可能不受此提供商支持。

让我更加困惑的是,备忘录的不同列也被处理为 DT_NTEXT ,并且也被放入 varchar(max) SQL数据库中的数据类型,不会抛出错误消息。我尝试了很多转换对象类型,但还没有成功执行包。

4 个答案:

答案 0 :(得分:13)

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

  • 将目标列的数据类型更改为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)

答案 1 :(得分:3)

  1. 在SQL nvarchar(100)
  2. 中更改数据类型
  3. 使用派生列编写将备忘录转换为unicode的表达式 的 (DT_WSTR,4000)((DT_NTEXT)消息)
  4. enter image description here

    1. 使用新的派生列名称进行地图
    2. enter image description here

答案 2 :(得分:1)

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

答案 3 :(得分:0)

这个问题是由于' (撇号)中的数据。删除具有撇号示例的记录:社区&而不是键入社区