我打電話SSIS包遠程使用存儲的過程和調用的xp_cmdshell:逃逸命令參數對xp_cmdshell到DTEXEC
declare @cmd varchar(5000)
set @cmd = '"C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\dtexec.exe" /Rep E /Sql Package /SET \Package.Variables[User::ImportFileName].Value;c:\foo.xlsx'
print @cmd
exec xp_cmdshell @cmd
這工作得很好,但是我不能保證可變值(C: \ foo.xslx)不會包含空格,所以我想逃避,與像下面報價:
set @cmd = '"C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\dtexec.exe" /Rep E /Sql Package /SET \Package.Variables[User::ImportFileName].Value;"c:\foo.xlsx"'
但是,這樣做我得到錯誤
'C:\Program' is not recognized as an internal or external command, operable program or batch file.
如果在cmd.exe中執行上述兩個命令都可以正常工作,所以我猜測SQL Server正在解釋我的雙引號和更改某些內容,但我無法弄清楚是什麼。