Я вызываю пакет служб SSIS удаленно, используя хранимую процедуру и вызов xp_cmdshell:
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 интерпретирует мои двойные кавычки и что-то меняет, но я не могу понять, что.