2017-04-20 50 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.