为什么这样的代码在PowerShell ISE中执行:
$var = 'dog';Invoke-SqlCmd -ServerInstance 'servername' -Query "insert into DB.dbo.tbl values ('$($var)')"
但是在SQL Server Agent中不作为CmdExec作业步骤?尽管按照惯例附上它。我相信这是多个查询,因为个别查询工作
powershell.exe -ExecutionPolicy Bypass -Command {$var = 'dog';Invoke-SqlCmd -ServerInstance 'servername' -Query "insert into DB.dbo.tbl values ('$($var)')"}
TL; DR;
我有一个带有CmdExec步骤的SQL Server代理作业。我希望分配一个变量,然后在插入语句中使用它。
到目前为止,以下插入内容将起作用:
powershell.exe -ExecutionPolicy Bypass -Command "Invoke-SqlCmd -ServerInstance 'servername' -Query 'insert into DB.dbo.tbl values (''cat'')'"
这会插入一只猫。现在我需要一只狗,这就是:
powershell.exe -ExecutionPolicy Bypass -Command "$var = 'dog'; Invoke-SqlCmd -ServerInstance 'servername' -Query ""insert into DB.dbo.tbl values (''$($var)'')"""
这里有两个问题,我在其他作业中成功使用逗号终止符来分隔命令。第二个问题是逃避双引号。我知道他们需要将变量处理成字符串。
我试过用双引号以及其中一个`来逃避。我还尝试将变量声明分成一个服务器代理作业步骤,并在另一个中使用该变量。
基于下面的@gvee答案,我将代码放在脚本块中,该脚本块在PowerShell中完美执行,但不是作为SQL代理CmdExec作业步骤
powershell.exe -ExecutionPolicy Bypass -Command {$var = '''dog'''; Invoke-SqlCmd -ServerInstance 'servername' -Query "insert into DB.dbo.tbl values ($($var))"}
注意我必须将变量三次转义,这些变量插入到表格中,作为' dog'包含引号。我从insert语句中删除了单引号,但我无法将其作为CmdExec步骤在Server Agent中运行
答案 0 :(得分:0)
-Command
接受一个ScriptBlock,所以给它一个旋转:
powershell.exe -ExecutionPolicy Bypass -Command {
Invoke-SqlCmd -ServerInstance "servername" -Query "insert into DB.dbo.tbl values ('cat')"
}