数据库项目 SQLCMD -v
Posted
技术标签:
【中文标题】数据库项目 SQLCMD -v【英文标题】:DATABASE PROJECT SQLCMD -v 【发布时间】:2015-02-03 13:45:05 【问题描述】:为了控制数据库版本,我使用 Visual Studio 数据库项目,但要执行项目生成的脚本,我使用 sqlcmd.exe。
在我的 script.postdeployment.sql 中有一个名为 $(environment) 的变量,它取决于服务器环境 (prd,uat,dev),我使用命令 sqlcmd.exe -v environment="dev"
将此值设置为该变量。问题是 Visual Studio 抛出编译错误
SQL72008:未定义变量环境。
好的,我知道为什么会出现此错误,这是因为该变量未在 Prject 属性(SQLCMD 变量选项卡)中定义,但是如果我在项目属性中添加此变量,则该值将在脚本中设置覆盖我在 sqlcmd.exe -v environment="dev" 中传递的值。
例如
,如果我在项目属性中设置$(environment)变量为“uat”并执行sqlcmd.exe -v environment="dev",最高优先级是我在项目属性中设置的值,所以UAT,因为该项目在我的脚本中生成以下语句:
:setvar app_environment "uat"
我该如何处理 Visual Studio 数据库项目和 sqlcmd.exe 之间的这个问题?
【问题讨论】:
您使用的是哪个版本的 Visual Studio? 我希望 Visual Studio 避免生成语句 ":setvar app_environment "uat"",但仅针对此变量...它将解决我的问题... 您是否尝试过使用发布配置文件来设置变量,然后从命令行调用它? schottsql.blogspot.com/2012/11/… 是的,其实我就是这样做的,买。如果在发布配置文件中创建一个名为 Environment 的变量,则需要为每个环境创建多个文件并重复不会因环境而改变的值。不好!! 【参考方案1】:我解决这个问题的方法是设置部署后脚本的属性如下:
构建操作:无
复制到输出目录:始终复制
执行此操作时,Visual Studio 将不会构建 post 脚本文件,而是将其复制到 /bin 文件夹。然后,您可以调用 SQLCMD 两次。一次用于数据库创建脚本,然后第二次用于使用 -v 选项的构建后脚本。
【讨论】:
以上是关于数据库项目 SQLCMD -v的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server Management Studio 查询中使用 SQLCMD 模式