【问题标题】:Data flow issue数据流问题
【发布时间】:2019-10-04 18:40:41
【问题描述】:

尝试在 SSIS 包中运行 Sql 命令时出错。

  • 任务:数据流任务
  • 连接:ADO.NET
  • 数据访问模式:Sql 命令
  • Sql 文本:

    从 field1 = 的表中选择?和 field2 = ?

错误:“没有为一个或多个必需参数指定值”

更多信息:

执行包中的Sql任务:

(常规选项卡) - 连接:ADO.NET - SQL 语句:exec storedprocedureX ?,?

(参数映射选项卡)

User::field1 , Input , String , 0 , -1
User::field2, Input, String, 1, -1

包中设置的变量

  • field112C
  • field2 价值 15A

我遗漏了什么导致无法在数据流级别读取变量值?我在执行 SQL 任务级别没有问题。

【问题讨论】:

  • SqlClient 使用名称而不是 ? 作为参数标记。将查询更改为 select from table where field1 = @field1 and field2 = @field2; 之类的内容,并使用这些名称定义参数。

标签: sql-server ssis dataflow


【解决方案1】:

数据流中的 OLE DB 命令与控制流中的执行 SQL 任务不同。您似乎正确地描述了执行 SQL 任务。

要在数据流中使用变量,您需要将它添加到数据流中——最简单的方法是使用带有表达式的派生列。在 OLE DB 命令之前将派生列添加到您的数据流中,并将其配置如下:派生列名称:field1;派生列:添加为新列;表达式:@[User::field1]。然后在 OLE DB 命令中,在 Column Mappings 下将列映射为 Input Column: field1;目标列:Param_0 等

【讨论】:

  • +1 说得好。我要补充一点,OP 应该非常小心 DB 命令,因为它们非常慢。这是因为它们为通过的每一行向数据库发出一个命令。因此,如果对数百万行执行 UPDATES 或 DELETES,则该作业可能需要几分钟到几小时才能完成。因此,请确保该命令仅在需要更改的行上执行。否则,绕过该行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多