для каждого объекта внутри каждого объекта - PullRequest
1 голос
/ 24 марта 2020

Я пишу l oop внутри l oop и использую основную переменную l oop в дочернюю переменную массива l oop.

входные параметры

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)"        
    }
    }

Я получаю 4 перекрестных соединения sql из приведенных выше для каждого объекта l oop. Ниже приведены заявления, но я хочу получить только 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

1 Ответ

3 голосов
/ 24 марта 2020

Если вы хотите перебрать два массива одинаковой длины, вы можете использовать один 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 возвращает количество элементов (2) в массиве $emp_id. Поскольку индексы начинаются с 0, вам понадобятся только индексы [0] и [1]. $query - это строка запроса с заполнителями {0} и {1} для оператора формата строки (-f). Затем Foreach-Object создает запрос для каждого индекса, заменяя один элемент (тот же элемент) из каждого массива.

...