首页 > 解决方案 > 在 For Each 循环容器内的不同点使用参数

问题描述

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

谁能发现我在下面做错了什么,因为它在更新发票状态对象上失败了?

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

更新发票状态对象的查询是:

Update
    I
 Set
    I.Status = 10
from
    Invoice I 
where 
    I.ID  = ?

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

标签: sqlsql-serverparametersssisexecute-sql-task

解决方案


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

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

基于以下文章解决由于参数未正确映射导致的 SSIS 错误

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

另外为什么 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]

推荐阅读