【问题标题】:Using Parameters at different points within For Each Loop Container在 For Each 循环容器内的不同点使用参数
【发布时间】:2019-02-16 11:32:48
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 不是我们所拥有的。 也许范围变量有误?
  • @Philip 您使用的 SQL 语句是什么?
  • @Hadi 只是将其放入问题中。谢谢。
  • @Larnu - 将检查。谢谢
  • 为什么是Update I Set I.Status = 10 from Invoice I where I.ID = ? 而不是UPDATE Invoice SET Status = 10 WHERE ID = ?

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


【解决方案1】:

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

我认为错误是由变量数据类型引起的。检查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]

【讨论】:

  • WorkOrderID 是“字符串”类型。
  • LONGInt类型的InvoiceID
  • @Philip 能否展示真正的 sql statemet Update I Set I.Status = CASE WHEN C1.Name = 'Cy .. 并提供 Execute SQL Task 中第一个表单的截图
  • InvoiceID 很长
  • 啊,天哪,谢谢。最后很简单的错过。
猜你喜欢
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多