Sql server 数据流问题

Sql server 数据流问题,sql-server,ssis,dataflow,Sql Server,Ssis,Dataflow,尝试在SSIS包中运行Sql命令时出错 任务:数据流任务 连接:ADO.NET 数据访问模式:Sql命令 Sql文本: 从表中选择field1=?字段2= 错误:“没有为一个或多个必需参数提供值” 更多信息: 在包中执行Sql任务: (常规选项卡) -连接:ADO.NET -SQL语句:exec storedprocedureX?,? (参数映射选项卡) 包中设置的变量 field1value12C field2value15A 我遗漏了什么导致变量值不能在数据流级别读取?我在执行SQL

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

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

    从表中选择field1=?字段2=

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

更多信息:

在包中执行Sql任务:

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

(参数映射选项卡)

包中设置的变量

  • field1
    value
    12C
  • field2
    value
    15A

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

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


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

SqlClient使用名称而不是
作为参数标记。将查询更改为类似于
select from表的内容,其中field1=@field1和field2=@field2并用这些名称定义参数。+1说得好。我想补充一点,OP应该非常小心使用DB命令,因为它们非常慢。这是因为对于通过的每一行,它们向DB发出一个命令。因此,如果对数百万行执行更新或删除,则该作业可能需要几分钟到几个小时才能完成。因此,请确保该命令仅在需要更改的行上执行。否则,请绕过该行。
User::field1 , Input , String , 0 , -1
User::field2, Input, String, 1, -1