【问题标题】:SSIS ETL from Microsoft SQL Server 2008 to Microsoft Access throwing error at OLE DB Destination component [duplicate]从 Microsoft SQL Server 2008 到 Microsoft Access 的 SSIS ETL 在 OLE DB 目标组件抛出错误 [重复]
【发布时间】:2014-06-19 10:52:33
【问题描述】:

我们的一台服务器上有普通的 Microsoft SQL Server 2008

以下是我们服务器上其他组件的版本:

  • Microsoft SQL Server Management Studio 10.0.5512.0
  • Microsoft Analysis Services 客户端工具 10.0.5500.0
  • Microsoft 数据访问组件 (MDAC) 3.85.1132
  • 微软 MSXML 2.6 3.0 4.0 6.0
  • Microsoft Internet Explorer 8.0.6001.18702
  • Microsoft .NET Framework 2.0.50727.3655 操作系统 5.1.2600

我们决定将 Microsoft SQL Server 2000 Extract-Transform-Load DTS 包迁移到 Microsoft SQL Server 2008 SSIS 包

我们决定在文件系统上创建 DTSX 文件,以便我们可以使用 BIDS 2008 打开 DTSX 文件。

迁移通过了所有测试。

但是,当我在 BIDS 2008 中运行 DTSX 文件时,我收到了许多错误消息。

我们的最终目标是 对于从 Microsoft SQL Server 2008 数据库中提取选定数据并将其放置在 Microsoft Access 数据库 MDB 文件中的数据流组件之一,我收到以下错误:

诊断,“OLE DB 源”(1),{00000001-0000-0000-0000-000000000000},{4901FE69-78A3-4280-8989-45ABC5743A18},2014 年 6 月 19 日上午 1:53:08 ,2014 年 6 月 19 日上午 1:53:08,0,0x,ExternalRequest_post:'ICommandWithParameters::GetParameterInfo 成功'。外部请求已完成。 OnProgress,,DTSTask_DTSDataPumpTask_24,{D1E141EB-593C-4016-90C8-6AA0C33661AA},{4901FE69-78A3-4280-8989-45ABC5743A18},6/19/2014 1:53:08 AM,6/19/2014 1:53: 08 AM,33,0x,预执行 OnError,,DTSTask_DTSDataPumpTask_24,{D1E141EB-593C-4016-90C8-6AA0C33661AA},{4901FE69-78A3-4280-8989-45ABC5743A18},6/19/2014 1:53:08 AM,6/19/2014 1:53: 08 AM,-1071636471,0x,SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80040E21。 OnError,,Generic_Application_Data_Export_SSIS,{177DC585-3B2B-4E9D-A80E-07D49B1A30E9},{4901FE69-78A3-4280-8989-45ABC5743A18},6/19/2014 1:53:08 AM,6/19/2014 1:53: 08 AM,-1071636471,0x,SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80040E21。 OnError,,DTSTask_DTSDataPumpTask_24,{D1E141EB-593C-4016-90C8-6AA0C33661AA},{4901FE69-78A3-4280-8989-45ABC5743A18},6/19/2014 1:53:08 AM,6/19/2014 1:53: 08 AM,-1071636443,0x,无法创建 OLE DB 访问器。验证列元数据是否有效。 OnError,,Generic_Application_Data_Export_SSIS,{177DC585-3B2B-4E9D-A80E-07D49B1A30E9},{4901FE69-78A3-4280-8989-45ABC5743A18},6/19/2014 1:53:08 AM,6/19/2014 1:53: 08 AM,-1071636443,0x,无法创建 OLE DB 访问器。验证列元数据是否有效。 OnError,,DTSTask_DTSDataPumpTask_24,{D1E141EB-593C-4016-90C8-6AA0C33661AA},{4901FE69-78A3-4280-8989-45ABC5743A18},6/19/2014 1:53:08 AM,6/19/2014 1:53: 08 AM,-1073450982,0x,组件“OLE DB 目标”(70) 未通过预执行阶段并返回错误代码 0xC0202025。 OnError,,Generic_Application_Data_Export_SSIS,{177DC585-3B2B-4E9D-A80E-07D49B1A30E9},{4901FE69-78A3-4280-8989-45ABC5743A18},6/19/2014 1:53:08 AM,6/19/2014 1:53: 08 AM,-1073450982,0x,组件“OLE DB 目标”(70) 未通过预执行阶段并返回错误代码 0xC0202025。 OnProgress,,DTSTask_DTSDataPumpTask_24,{D1E141EB-593C-4016-90C8-6AA0C33661AA},{4901FE69-78A3-4280-8989-45ABC5743A18},6/19/2014 1:53:08 AM,6/19/2014 1:53: 08 AM,66,0x,预执行 OnInformation,,DTSTask_DTSDataPumpTask_24,{D1E141EB-593C-4016-90C8-6AA0C33661AA},{4901FE69-78A3-4280-8989-45ABC5743A18},6/19/2014 1:53:08 AM,6/19/2014 1:53: 08 AM,1074016264,0x,后执行阶段开始。

编辑: 控制流组件从 Microsoft SQL Server 2008 SQL 选择查询的大约 18-19 列中获取数据,然后转换这些值以将它们放在 Microsoft Access 表中,这会引发上述错误,我有许多列我使用名为 OLE DB Source 的 DataFlow 组件从 Microsoft SQL Server 2008 表中检索。检索数据后,我有一个转换值的数据转换器数据流组件。最后,转换后的值由 OLE DB 目标数据流组件放置,并放置在 Microsoft Access 表中。

错误可能是由于某些源列与相应目标列的数据类型和/或长度不匹配造成的。正如我之前提到的,我们从作为源的 Microsoft SQL Server 2008 SQL 选择查询中检索大约 18-19 列的数据值。上述错误没有提到哪一个导致数据类型和/或长度不匹配。如何缩小导致问题的列?

【问题讨论】:

  • 搜索“无法创建 OLE DB 访问器”导致了这个 SO 问题 stackoverflow.com/questions/21110704/… 查看 MFucius80 的最后一个答案。这能解决您的问题吗?
  • @vikramsinh-shinde 和 billinkc 感谢您的建议。请在帖子中查看我的后续问题。
  • sql server 2008 数据的表定义是什么?那里的查询是什么?您对 Access 的表定义是什么?
  • @billinkc 请在我在以下stackoverflow.com 票stackoverflow.com/questions/24325226/… 中所做的第三篇帖子中查看我的答案

标签: sql-server-2008 ms-access ssis etl type-conversion


【解决方案1】:

是否可以使用新的 OLEDB 目标并为上游列和实际目标列进行映射?错误与元数据有关。可能是某些目标列的数据类型或长度已更改。

如果可能,请尝试将 Derived Column 与表达式一起使用以进行类型转换。

Derived Column Transformation

【讨论】:

    猜你喜欢
    • 2016-11-16
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多