Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SSIS对SQL的访问。绑定错误:绑定状态为";DT_NTEXT";_Sql Server_Ms Access_Visual Studio 2012_Ssis - Fatal编程技术网

Sql server SSIS对SQL的访问。绑定错误:绑定状态为";DT_NTEXT";

Sql server SSIS对SQL的访问。绑定错误:绑定状态为";DT_NTEXT";,sql-server,ms-access,visual-studio-2012,ssis,Sql Server,Ms Access,Visual Studio 2012,Ssis,我正在尝试从以前的同事那里继承一个SSIS包来执行。该包从Access数据库中提取数据,然后将数据放入SQL数据库中 其中一个字段(我们称之为“建议”)是Access数据库中的“备注”类型。SQL输出数据库中的列的类型为varchar(max)。 错误:0xC002F446位于数据流任务,OLE DB目标[218]:为“建议”列设置绑定时出错。绑定状态为“DT_NTEXT”。数据流列类型为“DBBINDSTATUS\u UNSUPPORTEDCONVERSION”。此提供程序可能不支持从OLE

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

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

错误:0xC002F446位于数据流任务,OLE DB目标[218]:为“建议”列设置绑定时出错。绑定状态为“DT_NTEXT”。数据流列类型为“DBBINDSTATUS\u UNSUPPORTEDCONVERSION”。此提供程序可能不支持从OLE DB类型“DBTYPE\u IUNKNOWN”到目标列类型“DBTYPE\u WVARCHAR”的转换


更让我困惑的是,类型为memo的另一列不会抛出错误消息,该列也被处理为DT\u NTEXT,并且也被放入SQL db中的varchar(max)数据类型中。我尝试了多种转换对象类型,但尚未成功执行该包。

我通过执行以下操作再现了此错误:

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

  • 在SQL nvarchar(100)中更改数据类型
  • 使用派生列写入将备忘录转换为unicode的表达式 (DT_WSTR,4000)((DT_NTEXT)消息)
  • 使用新的派生列名映射

  • 此问题是由于数据中的“(撇号)。删除带有撇号的记录示例:community's institute type community s

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

    sql中推荐的varchar(max)的数据类型是什么?我很惊讶备忘录栏没有抛出unicode转换错误。是的。刚意识到我原来的帖子在另一个专栏中也有类似的错误。很抱歉造成混淆。因此,当我尝试复制此问题时,我在oledb目的地的varchar(max)列中有一个ntext列,但它抛出了一个错误,即无法在unicode和非unicode类型之间转换。您确定您的sql表是varchar(max)吗?是否可以尝试将ntext列转换为text或将sql表转换为nvarchar(max)?发现同一个包的不同版本,其中长度为510的DT_WSTR的转换由数据转换对象完成。这一更改似乎执行得很好,但我不完全确定原因。这在Azure数据仓库目标表的类似场景中对我有效