我也在为此苦苦挣扎,但我记得我注意到 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"