5

尝试将 4 个表从 MySQL 源复制到 SQL Server 2008 时出现错误。

这是数据流的照片,如您所见,其中 2 个都可以(较小的)

在此处输入图像描述

使用OnError事件处理程序,我可以看到错误。他们来了。

SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80040E21。OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 10.0” Hresult:0x80040E21 描述:“多步 OLE DB 操作产生错误。检查每个 OLE DB 状态值(如果可用)。没有完成任何工作。”。

输入“OLE DB 目标输入”(510) 上的输入列“FechaHoraCorteAgente”(884) 出现错误。返回的列状态为:“转换失败,因为数据值溢出了指定类型。”。

SSIS 错误代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。“输入“OLE DB 目标输入”(510)”失败,因为发生错误代码 0xC020907A,并且“输入“OLE DB 目标输入”(510)”上的错误行处置指定错误失败。指定组件的指定对象发生错误。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

SSIS 错误代码 DTS_E_PROCESSINPUTFAILED。处理输入“OLE DB 目标输入”(510) 时,组件“OLE DB 目标 2”(497) 上的 ProcessInput 方法失败,错误代码为 0xC0209029。已识别的组件从 ProcessInput 方法返回错误。该错误是特定于组件的,但该错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

组件“ado net conptacto”(1) 无法处理数据。HRESULT 异常:0xC0047020

组件“ADO NET logllamados”(482) 无法处理数据。HRESULT 异常:0xC0047020

SSIS 错误代码 DTS_E_PRIMEOUTPUTFAILED。组件“ado net conptacto”(1) 上的 PrimeOutput 方法返回错误代码 0xC02090F5。当管道引擎调用 PrimeOutput() 时,组件返回了失败代码。失败代码的含义由组件定义,但错误是致命的并且管道停止执行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

SSIS 错误代码 DTS_E_PRIMEOUTPUTFAILED。组件“ADO NET logllamados”(482) 上的 PrimeOutput 方法返回错误代码 0xC02090F5。当管道引擎调用 PrimeOutput() 时,组件返回了失败代码。失败代码的含义由组件定义,但错误是致命的并且管道停止执行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

知道这里发生了什么吗?

4

3 回答 3

5

“转换失败,因为数据值溢出了指定的类型。” 看起来很明显,你正试图在不适合的地方插入一些东西。我建议您将所有源列与目标列进行比较,并确保:

  • 长度就足够了
  • 数据类型兼容

如果您愿意,可以发布您的表格结构

于 2012-05-09T14:46:09.750 回答
3

源列在日期时间字段中有 0000-00-00。所以出现了错误。

使用以下表达式创建派生列:

(DT_DBTIMESTAMP)(DAY([FechaHoraCorteAgente]) == 0 ? NULL(DT_DBTIMESTAMP) : [FechaHoraCorteAgente])
于 2012-05-09T15:22:42.477 回答
2

这是源头的故障,如果包在目的地插入时出现故障,那很容易解决。我遇到过很多情况,其中源数据大于 SSIS 源期望看到的数据。

我认为当您创建源时,SSIS 会自动对输入数据进行采样以查看最大长度。但是,如果超过了最大长度怎么办?这就是我看到与溢出有关的大多数问题的地方。

此外,很多时候在处理处理不当的源数据时,您会在日期时间字段中看到字符数据。这种情况也会破坏包装。

于 2012-05-09T15:42:39.900 回答