如何在ssis中更新目标表?

时间:2012-04-03 07:03:01

标签: ssis

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

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

update emptem set empno = ? where empname=? 

我收到如下错误

  

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

     

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

     

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

     

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

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

更新emptem set empno =? empname =?

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