在每个循环容器中的不同点使用参数

时间:2019-02-16 11:32:49

标签: sql sql-server parameters ssis execute-sql-task

我在控制流中具有以下步骤,其中第一个执行SQL任务使用WorkOrderID,第二个脚本任务使用InvoiceID。

任何人都可以在“更新发票状态”对象上看到我在做错的事情吗?

  

[执行SQL任务]错误:执行查询“我设置的更新     I.Status = C1.Name ='Cy ...'时失败,出现以下情况   错误:“多步OLE DB操作生成错误。检查每个   OLE DB状态值(如果有)。未完成任何工作。”。可能   失败原因:查询问题,“ ResultSet”属性未设置   正确,参数设置不正确或连接未建立   正确。

,并且“更新发票状态”对象的查询为:

CREATE TRIGGER tr_player_computed
AFTER INSERT OR UPDATE OR DELETE ON emp
    FOR EACH ROW EXECUTE PROCEDURE f_tr_player_computed();

CREATE OR REPLACE FUNCTION f_tr_player_computed() RETURNS TRIGGER AS $player$
   BEGIN
      new.bmi = (new.weight/((new.height/100)^2));
      RETURN NEW;
   END;

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

检查数据类型和参数名称/顺序

我认为该错误是由Variable数据类型引起的。检查User::WorkerID的类型为VARCHAR,但它必须是整数。检查变量的数据类型是否与列相关。

基于以下文章Resolving an SSIS Error Due to Parameters Not Mapped Correctly

  

可能会出现此特定错误的其他原因是,如果您的数据类型设置不正确,或者查询参数的数量与映射的变量不匹配(且顺序正确)。

为什么InvoiceID参数名称是1而不是0?尝试将其更改回0


解决方法

如果参数仍然存在问题,则可以使用Expression构建SQL语句:

Execute SQL Task编辑器中转到“表达式”。选择SQLStatmentSource属性并编写类似的表达式:

"Update
    I
Set
    I.Status = 10
from
    Invoice I 
where 
    I.ID  = " + (DT_WSTR,50)@[User::InvoiceID]