2017-04-20 29 views
3

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

PowerShell在通过PowerShell ISE运行时运行正常,但没有错误,但在SQL中运行时会引发语法错误。

出错行是第一行是

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

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

,显示在作业历史的错误是

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

如何得到这个在SQL工作任何想法?

+0

究竟你是如何通过SQL运行此在/? – Igor

+0

在SQL代理作业步骤 – Cornflake2068

+0

这可能是一个深奥的代理问题。在[DBA.so]上查看类似的问题(https://dba.stackexchange.com/a/58679)。如果情况并非如此,请添加更多详细信息,如确切的错误消息和MCVE。 – vonPryz

回答

2

子表达式运算符$()是不必要的这串之内的PowerShell将扩大这两个变量为字符串正确,没有它:

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

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

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