Я тоже боролся с этим, но я помню, что заметил, что msdeploy.exe также может выполнять сценарии sql с переменными. Но по какой-то странной причине msdeploy.exe может передавать переменные из командной строки, причем значения переменных из командной строки имеют приоритет над значениями, определенными в самом сценарии.
Пример:
У меня есть сценарий SQL (NavDbSecurity.sql), который имеет три параметра, определенные:
:setvar loginName "testLoginName"
:setvar databaseName "testDatabaseName"
:setvar NavCompanyName "blablabla"
Когда я выполняю следующий скрипт msdeploy, значения параметров, которые я передаю через командную строку, имеют приоритет над значениями, определенными в файле скрипта (не обращайте внимания на пользователя sa без пароля;)):
msdeploy.exe -verb:sync -source:dbfullsql="c:\NavDbSecurity.sql" -dest:dbfullsql="data source=.\sqlexpress;initial catalog=data base;User Id=sa;Password=;",transacted=False -setParam:kind=SqlCommandVariable,scope="NavDbSecurity.sql",match=databaseName,value="[data base]" -setParam:kind=SqlCommandVariable,scope="NavDbSecurity.sql",match=loginName,value="domain\user" -setParam:kind=SqlCommandVariable,scope="NavDbSecurity.sql",match=NavCompanyName,value="testCompany"