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

Sui*_*Yun 2 sql-server powershell

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

aaaaa | 呜呜呜呜

在一排,但我想要

  | 乙
 一个| bb
啊| 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() 
Run Code Online (Sandbox Code Playgroud)

如何操作我的代码以插入 3 个单独的行而不是 1 行?

Ans*_*ers 6

PowerShell 只对字符串进行简单的变量扩展。它不会以您期望的方式扩展诸如索引或属性访问之类的复杂表达式。表达式"$stringA[$i]"被扩展为字符串表示形式,$stringA后跟一个左方括号、变量的值$i和一个右方括号。的字符串表示$stringA是由$OFS字符(输出字段分隔符,默认为空格)连接的所有数组元素,因此您首先插入a aa aaa[0],然后a aa aaa[1],然后a aa aaa[2]

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

但是,在您的特定情况下,我不建议使用上述任何一种方法,因为所有这些方法都会使您的代码容易受到SQL 注入的影响

您想要做的是使用准备好的语句。像这样的东西:

$sql = 'INSERT INTO [dbo].[Server] (ServerName, UniqueID) VALUES (@foo, @bar)'
$command.CommandText = $sql
$command.Parameters.AddWithValue('@foo', $stringA[$i])
$command.Parameters.AddWithValue('@bar', $stringB[$i])
$Command.ExecuteReader()
Run Code Online (Sandbox Code Playgroud)