SSIS 无法检索列 varchar(max) 的长数据

Posted

技术标签:

【中文标题】SSIS 无法检索列 varchar(max) 的长数据【英文标题】:SSIS Failed to retrieve long data for column varchar(max) 【发布时间】:2013-06-21 20:21:35 【问题描述】:

我想构建一个将 Excel 行导入 SQL Server 表的包,问题是有时会出现错误导致打包过程失败。

[Excel 源 [1]] 错误:SSIS 错误代码 DTS_E_OLEDBERROR。一个 OLE 数据库 发生错误。错误代码:0x80040E21。 [Excel 源 [1]] 错误: 未能检索到“推荐”列的长数据。 [Excel 源代码 [1]] 错误:输出“Excel 源输出”出现错误 (9) 在组件“Excel 源”(1) 上。返回的列状态为: “DBSTATUS_UNAVAILABLE”。

如您所见,“推荐”列有问题。

注意:错误出现在 Excel 源任务中。

【问题讨论】:

问题似乎与ace驱动对列类型的解释有关。这可能会对您有所帮助:social.msdn.microsoft.com/Forums/sqlserver/en-US/… 【参考方案1】:

我有同样的问题。显然,MS Jet 数据库引擎检查一列的前 8 行以尝试猜测该列的数据类型是什么(无论您指定什么类型)。

当我将注册表项 TypeGuessRows 的值从 8 更改为 0 时,我的问题已修复。 此密钥将位于以下任一位置:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel

HKEY_LOCAL_MACHINE -> SOFTWARE -> Wow6432Node -> Microsoft -> Jet -> 4.0 ->Engines -> Excel

【讨论】:

【参考方案2】:

减少DefaultBufferMaxRows 对我有帮助。

这可能是运气,但它有所帮助。

【讨论】:

【参考方案3】:

对我来说,它正在创建一个新的 oledb 源。我正在为我的新查询重用现有的 oledb 源。改变它解决了我的问题

【讨论】:

【参考方案4】:

我知道这是一个老问题,但我刚刚遇到了这个问题,结果发现它丢失了“C:\SSISTempStoragePath” 目录。 这样一个简单的问题,带有非常神秘的错误消息。 SSIS 将在此目录中为源中的每一列和每一行创建一个文件。当心要扫描所有这些文件的防病毒软件。 这些文件名为“DTB>此处为 GUID

【讨论】:

以上是关于SSIS 无法检索列 varchar(max) 的长数据的主要内容,如果未能解决你的问题,请参考以下文章

SSIS 错误:无法从 SQL 命令的参数中检索目标列描述

使用 C# 和存储过程从 SQL Server 检索 VarChar(MAX)

使用 varchar(max) 进行慢速“选择”查询

当主键为 varchar 时,无法从 Laravel 的 Eloquent 中检索列值

SSIS:无法创建OLE DB访问器。验证列元数据是否有效

SSIS:代码页回到 65001