数据库项目 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 模式

SQL Server Management Studio 查询中使用 SQLCMD 模式

求大神解决sqlcmd执行sql文件忽略错误的问题

路径中的 SQLCMD 变量

如何为 SQLCMD 使用 Windows 用户?

SqlServer2008R2使用SQLCMD执行多个脚本