【问题标题】:How to update destination table in ssis?如何更新 ssis 中的目标表?
【发布时间】:2012-04-03 07:03:00
【问题描述】:

我有一个 emp 表有 id、name、description 的场景。
我只需要将 id 和 name 列复制到emptem。
当在 emp 中添加新记录时,应该将相同的记录插入到 emptem 中,并且没有任何重复。
我已经通过在查找中指定 emptem 表来使用查找完成此操作,并将目标与没有匹配列的 emptem 匹配。

现在我有一个新场景,如果 emp 中的任何记录被更新,我需要 emptem 中的更新值。
我将继续与上述相同的场景并将查找表与 oledb 命令匹配。我已经给出了更新 stmt

update emptem set empno = ? where empname=? 

我收到如下错误

错误:数据流任务 5 中的 0xC0202009,OLE DB 命令 [177]:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80040E21。 OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 10.0”Hresult:0x80040E21 描述:“转换规范的字符值无效”。

错误:数据流任务 5 中的 0xC020901C,OLE DB 命令 [177]:输入“OLE DB 命令输入”(182) 上的输入列“ename”(193) 存在错误。返回的列状态为:“由于可能丢失数据,无法转换该值。”。

错误:数据流任务 5 中的 0xC0209029,OLE DB 命令 [177]:SSIS 错误代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 “输入“OLE DB 命令输入”(182)”失败,因为发生错误代码 0xC0209069,并且“输入“OLE DB 命令输入”(182)”上的错误行处理指定错误失败。指定组件的指定对象发生错误。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

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

有什么建议吗?

【问题讨论】:

    标签: ssis


    【解决方案1】:

    您遇到的错误与更新本身没有直接关系,而是与数据类型有关。您尝试在ename 列中插入的值与目标表的类型或大小不同。

    找出不同之处并在目标组件之前进行转换,一切都应该正常

    【讨论】:

    • 我已经检查过源和目标的数据类型是否相同。即 empno 为 int,ename 为 varchar(20)。
    • 即使在数据流中,empno - DI_I4 和 ename = DT_STR 的数据类型也是相同的
    • 目标表怎么样?您是否检查过排序规则是否匹配?这显然是一个数据类型转换错误,但有时它们比看起来更难发现。
    【解决方案2】:

    您可能正在交换 目标列的映射顺序与“?” 参数(在 OLEDB 命令转换中)

    更新 emptem set empno = ? empname=?

    在(OLEDB 命令转换的)列映射选项卡中,确保 Param_0 映射到 empno,Param_1 映射到 empName

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-20
      相关资源
      最近更新 更多