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

CAJ*_*AJE 8 sql-server ms-access ssis visual-studio-2012

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

其中一个字段,我们称之为"推荐",是Access数据库中的"备忘录"类型.SQL输出数据库中的列的类型为varchar(max).

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

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

Mar*_*icz 14

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

  • 将目标列的数据类型更改为 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.
Run Code Online (Sandbox Code Playgroud)

所以我认为你发现的是,该ntext列的值超过了nvarchar(max)导致溢出的值.

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


ati*_*ker 6

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

在此处输入图片说明

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

在此处输入图片说明