【发布时间】:2018-03-19 09:18:45
【问题描述】:
为什么这样的代码会在 PowerShell ISE 中执行:
$var = 'dog';Invoke-SqlCmd -ServerInstance 'servername' -Query "insert into DB.dbo.tbl values ('$($var)')"
但不是在 SQL Server 代理中作为 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))"}
请注意,我必须对变量进行三次转义,将其作为“狗”插入表中,并包含引号。我从插入语句中删除了单引号,但是我无法让它在服务器代理中作为 CmdExec 步骤运行
【问题讨论】:
-
请不要用答案更新您的问题。而是将它们作为答案发布。谢谢。
-
谢谢! 3个报价也对我有用!你拯救了我的一天!
标签: sql-server powershell sql-server-agent