【问题标题】:DATABASE PROJECT SQLCMD -v数据库项目 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 的变量,则需要为每个环境创建多个文件并重复不会因环境而改变的值。不好!!

标签: sql-server visual-studio database-project


【解决方案1】:

我解决这个问题的方法是设置部署后脚本的属性如下:

构建操作:无

复制到输出目录:始终复制

执行此操作时,Visual Studio 将不会构建 post 脚本文件,而是将其复制到 /bin 文件夹。然后,您可以调用 SQLCMD 两次。一次用于数据库创建脚本,然后第二次用于使用 -v 选项的构建后脚本。

【讨论】:

    猜你喜欢
    • 2017-08-03
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 2017-03-15
    • 2019-01-21
    • 1970-01-01
    相关资源
    最近更新 更多