将数组中的PowerShell值插入SQL Server表

时间:2018-06-28 20:11:25

标签: sql-server powershell

powershell下面的代码将插入到SQL Server表中,例如

a aa aaa | b bb bbb

成一行,但我想要

  a |   b
 aa |  bb
aaa | bbb

在3个单独的行上。

$Connection = New-Object System.Data.SQLClient.SQLConnection
$Connection.ConnectionString = 
    "server='$Server';database='$Database';trusted_connection=true;"
$Connection.Open()
$stringA = 'a', 'aa', 'aaa'
$stirngB = 'b', 'bb', 'bbb'
for ($i = 0; $i -lt 3; $i++) {
    $sql = "INSERT INTO [dbo].[Server] (ServerName, UniqueID)
           VALUES ('$stringA[$i]','$stringB[$i]')"
    $Command.CommandText = $sql
    $Command.ExecuteReader()
}
$Connection.Close() 

如何处理代码以插入3行而不是1行?

1 个答案:

答案 0 :(得分:3)

PowerShell仅在字符串中执行简单的变量扩展。它不会像您期望的那样扩展复杂的表达式,例如索引或属性访问。将表达式"$stringA[$i]"扩展为$stringA的字符串表示形式,后跟一个方括号,变量$i的值和一个方括号。 $stringA的字符串表示形式是所有由$OFS字符(输出字段分隔符,默认为空格)连接的数组元素,因此您要先插入a aa aaa[0],然后插入{{1} },然后a aa aaa[1]

有几种方法可以将数组的各个元素放入字符串中,例如

  • 字符串串联

    a aa aaa[2]
  • 子表达式

    "... VALUES ('" + $stringA[$i] + "','" + $stringB[$i] + "')"
    
  • format operator

    "... VALUES ('$($stringA[$i])','$($stringB[$i])')"
    

但是,在您的特定情况下,我不建议您使用上述任何一种方法,因为它们都会使您的代码容易受到SQL injection的攻击。<​​/ p>

您要使用的是prepared statement。像这样:

"... VALUES ('{0}','{1}')" -f $stringA[$i], $stringB[$i]