无法将数组中的PowerShell变量插入到Invoke-Sqlcmd调用中

时间:2019-01-10 11:07:42

标签: powershell invoke-sqlcmd

我有一个遍历字符串的数组,该字符串将值分配给元素。如果然后将这些元素分配给变量并将该变量传递给invoke-sqlcmd,则会收到错误消息。但是,如果我直接将值分配给变量并将其传递给它,效果很好:

将值分配给数组:

for ($i=0; $i -lt $somearray.length; $i++) {
    $somearray[$i] = $somearray[$i].Replace('$(query)', $query.text)
}

让我们说somearray [0] =“从数据库中选择*”。我们将分配一个变量:

$query = somearray[0]

现在我将其传递给我的Invoke-Sqlcmd

Invoke-Sqlcmd -Query $query -Database "local" -ServerInstance "somedb" |
    Export-Csv ".\somefile.csv"

此操作失败:

Invoke-Sqlcmd : Could not find stored procedure 'select * from ALERTS'.
At C:\Migration\ExportTool\ExportTool\Gavs.ps1:95 char:17
+ ...             Invoke-Sqlcmd -Query $query -Database $db -ServerInstance ...

但是,如果我这样做:

$query = "select * from DB"

Invoke-Sqlcmd -Query $query -Database "local" -ServerInstance "somedb" |
    Export-Csv ".\somefile.csv"

它运行完美。

1 个答案:

答案 0 :(得分:0)

因此,原因似乎是这样的:

$query = somearray[0]

当您在Invoke-sql命令中查看$ query时,它看起来像这样:

"select * from DB"

执行此操作时:

$query = "select * from DB"

它看起来像这样:

select * from DB

因此,直接引用字符串会删除Invoke-sqlcmd命令中的引号。似乎很奇怪。

希望这对以后的人有帮助。