调用PowerShell时出现SQL语法错误

时间:2017-04-20 10:25:39

标签: sql-server powershell

我有一些在SQL Server代理作业中使用的PowerShell代码。作业本身连接到FTP站点并下拉特定目录中的所有文件名。

PowerShell在没有错误的情况下通过PowerShell ISE运行时工作正常,但是当它在SQL中运行时会引发语法错误。

违规行是第一行

$FTPRequest = [System.Net.FtpWebRequest]::Create("$($Server)$($Directory)")

我做了一些研究,发现SQL不喜欢$($并删除前2个字符$(。然而,这不起作用,因为还有另一个紧随其后(我也删除了),现在代码运行但什么也没做。

作业历史记录中显示的错误是

Message
Unable to start execution of step 1 (reason: line(8): Syntax error).  The step failed.

关于如何在SQL中使用它的任何想法?

2 个答案:

答案 0 :(得分:2)

子字符串操作符$()在此字符串中是不必要的,因为PowerShell会在没有它的情况下将两个变量正确扩展为字符串:

$FTPRequest = [System.Net.FtpWebRequest]::Create("$Server$Directory")

答案 1 :(得分:2)

由于SQL Server代理user tokens,您自己收到错误。 SQL Server代理将$()视为特殊字符序列,找到后将尝试将内部值解析为特定用户令牌。由于一个不匹配,您将收到语法错误。显然,PowerShell以完全不同的方式处理此序列,因此在ISE中运行相同的代码不会返回错误。

简单的答案是,在SQL Server代理作业步骤中使用PowerShell时,不能在代码中使用子表达式语法。您需要重新编码。 A bit more background on my experience with it.