Основная проблема - точка с запятой, которую вы вводите для User::ProcessData
, интерпретируется как разделитель для параметров командной строки, а не как значение внутри строки.
Вы можете проверить это поведение, добавив точку с запятой к первому свойству
dtexec /ISServer "\SSISDB\DEV\PopulateData\PopulateData.dtsx" /server abbaa.com,3181 /Par "$ServerOption::SYNCHRONIZED(Boolean)";True /SET \Package.Variables[User::Environment].Properties[Value];"[sql1811174];Dev"
, которое сгенерирует
Аргумент "" \ Package.Variables [Пользователь :: Environment] .Properties [Value] [sql1811174] ;;Dev "" для опции "set" недопустим.
Совершенно неинтуитивный подход к экранированию заключается в добавлении косой черты в двойные кавычки для значений параметров и их удвоении.
dtexec /ISServer "\SSISDB\DEV\PopulateData\PopulateData.dtsx"
/server abbaa.com,3181 /Par "$ServerOption::SYNCHRONIZED(Boolean)";True
/SET \Package.Variables[User::Environment].Properties[Value];\"[sql1811174] Dev\"
/SET \Package.Variables[User::ProcessData].Properties[Value];"\"Data Source=xxxxxxx,3181;Initial Catalog=xxx11;Provider=SQLNCLI11.1;Integrated Security=SSPI;\""
Почему я могу использовать простую двойную кавычку для Environment, но не для ProcessData?Отличный вопрос и понятия не имею.Я предполагаю, что это что-то со сложностью аргумента + повлияло на предыдущие аргументы.