Powershell foreach INSERT INTO SQL Server DB на нескольких строках - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь вставить 2 отдельных массива в несколько записей по одной команде вставки SQL.Я выполнил команду foreach, но она примет только 1 из массивов.Я пытался делать вложенные операторы foreach, но это просто вставляет во многие записи.Ниже приведен код, который у меня есть.Я не публикую свой код подключения к моей БД, но гарантирую, что он подключается к БД.

$array1 = @(1,2,3)
$array2 = @(a,b,c)

foreach ($file in $array1)
        { 
         $SqlQuery.Append("USE $SQLDBName;")
         $SqlQuery.Append("INSERT INTO tbl_File(Column1, Column2, Column3)")
         $SqlQuery.Append("VALUES('Dummy Data', '$file', '$array2');")
        }

Что меня больше всего смущает, так это то, как заставить оба массива правильно анализировать в БД.Я надеюсь, что объяснил это правильно.Что-нибудь помогает!

Вот пример того, как это должно выглядеть:

Column 1   |  Column 2   |  Column 3
Dummy Data   User Input1   User Input1
Dummy Data   User Input2   User Input2
Dummy Data   User Input3   User Input3

Вот как я хочу, чтобы столбец 2 был первым массивом и столбцом 3будучи вторым массивом.Столбец 1 всегда будет одинаковым.

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

На основе недавно добавленного ожидаемого результата

$array1 = @(1, 2, 3)
$array2 = @("a", "b", "c")

$sqlQuery = [System.Text.StringBuilder]::new()
$sqlQuery.AppendLine("INSERT INTO tbl_File(Column1, Column2, Column3)")
$sqlQuery.AppendLine("VALUES ")

$hash = @{
    A1 = $array1
    A2 = $array2
}

$counter = $array1.count # Supposedly both arrays always contain same number of elements.
for ($i = 0; $i -le $counter - 1; $i++)
{
    $sqlQuery.AppendLine("('Dummy Data', '" + $hash['A1'][$i] + "', '" + $hash['A2'][$i] + "')")
}

$sqlQuery.ToString();

Результат:

INSERT INTO tbl_File(Column1, Column2, Column3)
VALUES
('Dummy Data', '1', 'a')
('Dummy Data', '2', 'b')
('Dummy Data', '3', 'c')

(старое решение) На основании ваших комментариев я думаю, что этожелаемый результат в вашей таблице:

Column1      Column2      Column3
Dummy Data   1 2 3        a b c

Этот скрипт PS генерирует необходимый оператор INSERT:

$array1 = @(1, 2, 3)
$array2 = @("a", "b", "c")

$sqlQuery = [System.Text.StringBuilder]::new()
$sqlQuery.AppendLine("INSERT INTO tbl_File(Column1, Column2, Column3)")
$sqlQuery.AppendLine("VALUES ")
$sqlQuery.AppendLine("('Dummy Data', '" + "$array1" + "', '" + "$array2" + "')")
$sqlQuery.ToString();

Результат:

INSERT INTO tbl_File(Column1, Column2, Column3)
VALUES
('Dummy Data', '1 2 3', 'a b c')
0 голосов
/ 06 декабря 2018

пересмотрено на основе ваших комментариев.должно быть легко поместить в sql stmt

Это способ извлечения значений из двух массивов бок о бок для каждой позиции индекса

$array1 = @(1,2,3)
$array2 = @('a','b','c')

$counter = 0;
foreach ($file in $array1)
        { 
            Write-Host $file $array2[$counter]
            $counter +=1;
        }

, если вы хотите, чтобы весь массив хранился встолбец, вам, возможно, потребуется преобразовать строку в разделитель

$array1 = @(1,2,3)
$array2 = @('a','b','c')

$counter = 0;
foreach ($file in $array1)
        { 
            Write-Host $file ([string]::Join(',', $array2))
            $counter +=1;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...