for-each-object inside for-each-object

for-each-object inside for-each-object

我在循环中编写循环,并将主循环变量用于子循环数组变量。

输入参数

param(
[array]$Emp_ID=@(1,2),
[array]$Emp_Name=@("Scott", "Jones")
)

$Sql_Get_Emp_ID_List = @()
    $Emp_ID | ForEach-Object { $Src_Emp_ID = $_
    $Emp_Name | ForEach-Object { $Src_Emp_Name = $_

    $Query_GetDeptID="(Select Dept_ID From Dept_Table Where Emp_Name = '$Src_Emp_Name' And Emp_ID = $Src_Emp_ID)"        
    }
    }

我从上述 for-each-object 循环中得到 4 个交叉连接 sql 语句。以下是声明,但我只想获得 2 个声明。

Select Dept_ID From Dept_Table Where Emp_Name = 'Scott' And Emp_ID = 1
Select Dept_ID From Dept_Table Where Emp_Name = 'Scott' And Emp_ID = 2
Select Dept_ID From Dept_Table Where Emp_Name = 'Jones' And Emp_ID = 1
Select Dept_ID From Dept_Table Where Emp_Name = 'Jones' And Emp_ID = 2

我想要这样的输出:

Select Dept_ID From Dept_Table Where Emp_Name = 'Scott' And Emp_ID = 1
Select Dept_ID From Dept_Table Where Emp_Name = 'Jones' And Emp_ID = 2

如果要遍历两个等长数组,可以对两个数组使用一个 Foreach-Object 和一个索引。

$emp_id = 1,2
$emp_name = 'scott','jones'
$query = "Select Dept_ID From Dept_Table Where Emp_Name = '{0}' And Emp_ID = {1}"

0..($emp_id.Count-1) | Foreach-Object { $query -f $emp_name[$_],$emp_id[$_] }

解释:

$emp_id.Count returns $emp_id 数组中的项目数 (2)。由于索引从 0 开始,因此您只需要索引 [0][1] 即可。 $query 是您的查询字符串,占位符 {0}{1} 用于 string format operator (-f)。然后 Foreach-Object 为每个索引创建一个查询,从每个数组中替换一个元素(相同的元素)。