我有一个遍历字符串的数组,该字符串将值分配给元素。如果然后将这些元素分配给变量并将该变量传递给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"
它运行完美。
答案 0 :(得分:0)
因此,原因似乎是这样的:
$query = somearray[0]
当您在Invoke-sql命令中查看$ query时,它看起来像这样:
"select * from DB"
执行此操作时:
$query = "select * from DB"
它看起来像这样:
select * from DB
因此,直接引用字符串会删除Invoke-sqlcmd命令中的引号。似乎很奇怪。
希望这对以后的人有帮助。