要控制数据库版本,我使用Visual Studio数据库项目,但要执行项目生成的脚本,我使用sqlcmd.exe。
我的script.postdeployment.sql中有一个名为$(environment)的变量,它取决于服务器环境(prd,uat,dev),我使用命令sqlcmd.exe -v environment="dev"
将此值设置为此变量。问题是Visual Studio抛出了编译错误
SQL72008:未定义变量环境。
好的,我知道为什么会出现这个错误,这是因为该变量未在Prject属性中定义(SQLCMD变量选项卡),但是如果我在项目属性中添加此变量,则将在脚本覆盖中设置该值我在sqlcmd.exe -v环境中传递的值=" dev"。
例如
,如果我在项目属性中将$(environment)变量设置为" uat"并执行sqlcmd.exe -v environment =" dev",最高优先级是我在项目属性中设置的值,所以UAT,因为项目在我的脚本中生成以下语句:
:setvar app_environment "uat"
我如何处理visual studio数据库项目和sqlcmd.exe之间的这个问题?
答案 0 :(得分:0)
我解决这个问题的方法是设置部署后脚本的属性,如下所示:
构建动作:无
复制到输出目录:始终复制
执行此操作时,Visual Studio不会构建后脚本文件,但会将其复制到/ bin文件夹。然后,您可以两次调用SQLCMD。一次用于数据库创建脚本,然后第二次用于使用-v选项的后期构建脚本。