我如何将ID和名称传递给变量并执行过程

时间:2018-11-19 15:04:15

标签: sql sql-server tsql ssis

我需要执行2个程序  例如:

<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>thirdparty</artifactId>
        <version>${project.version}</version>
        <type>pom</type>
    </dependency>
    ...
</dependencies>

我有一个主表,其中有这样的记录

Exec usp_Employee @name = 'Employee'

Exec usp_Department @ID = 2,@name = 'Department'

如何将此表数据传递给作为参数发送到过程的变量

员工名称应作为参数进入usp_Employee Procedure,ID和部门名称应作为参数进入usp_Department Procedure

我已经创建了执行SQL任务,因为我已经放置了此过程

ID name
1  Employee
2  Department
3  Class

并用于F​​or循环容器,但未按预期执行。

如何将主表数据循环到变量中并将其作为参数传递给那些过程。

建议我

1 个答案:

答案 0 :(得分:2)

在Foreach循环之前,您需要执行Execute SQL任务。在第一个执行SQL中,编写查询以从您感兴趣的表中选择记录。

SELECT 
  ID,
  Name
FROM SomeTable;

在“常规”选项卡上,将ResultSet设置为“ Full result set”。在结果集选项卡上,将结果分配给对象变量。

在您的Foreach循环中,在“集合”选项卡上循环Object变量。在集合选项卡上,将枚举器设置为“ Foreach ADO枚举器”。然后,您的对象变量应该可以在“ ADO对象源变量”下拉列表中进行选择。在“变量映射”选项卡上,创建两个新变量,例如CurrentInt和CurrentString(可能是INT32和String),然后将当前循环迭代中的Object变量值分配给这些变量。这两个变量将传递给循环容器内的任务。

在Foreach容器中,使用“执行SQL”任务。在“参数映射”选项卡上,拾取“循环”容器设置的两个变量。在任务内添加局部变量,将传递的参数分配给这些变量,然后在任务内使用局部变量。因此,在您的示例中,这样的事情应该可以解决问题:

DECLARE 
  @IdFromTable INT = ?,
  @NameFromTable VARCHAR(50) = ?;

EXEC usp_Employee 
  @name = @NameFromTable;

EXEC usp_Department 
  @ID = @IdFromTable,
  @name = @NameFromTable;