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行?
答案 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] + "')"
"... VALUES ('$($stringA[$i])','$($stringB[$i])')"
但是,在您的特定情况下,我不建议您使用上述任何一种方法,因为它们都会使您的代码容易受到SQL injection的攻击。</ p>
您要使用的是prepared statement。像这样:
"... VALUES ('{0}','{1}')" -f $stringA[$i], $stringB[$i]