Powershell foreach在多行上插入SQL Server数据库

时间:2018-12-06 14:08:37

标签: sql sql-server powershell foreach

我试图在1个SQL插入命令上将2个单独的数组插入到多个记录中。我已经完成了foreach命令,但它只接受其中一个数组。我曾尝试做嵌套的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 :(得分:1)

根据您的评论进行了修订。应该很容易放入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;
        }

答案 1 :(得分:0)

基于新添加的预期结果

$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')