Visual Studio:使用 SQLCMD 变量在部署时更改数据库类型

Posted

技术标签:

【中文标题】Visual Studio:使用 SQLCMD 变量在部署时更改数据库类型【英文标题】:Visual Studio: use SQLCMD variables to change DB types at deploy time 【发布时间】:2014-02-11 17:30:51 【问题描述】:

我们在 Visual Studio 中有一个 DB 项目,它会生成一个 .dacpac 文件。然后我们使用这个 dacpac 和 sqlcommand.exe 来部署我们的数据库。 我们的要求是能够在部署时更改列类型,就像我们可以使用 sqlcommand.exe 开关更改数据库名称一样。 例如:

    :setvar CHARTYPE "VARCHAR"

    ALTER TABLE tempTable ADD newColumn $(CHARTYPE)(200);
    --or
    DECLARE @tempVar $(CHARTYPE)(200);

此 SQL 可通过 SSMS 完美运行,但尝试通过 Visual Studio 执行此操作被证明是困难的。

我在项目属性中创建了一个 SqlCmd 变量,并在存储过程主体中使用它:

DECLARE @TempVar $(CHARTYPE)(100)

但这不起作用。我的 DB 项目无法构建,并在 @TempVar 处给我一个语法错误。

如果我在引号 '$(CHARTYPE)' 中使用 SqlCmd 变量,它很好,并且显示为字符串文字 'VARCHAR'。

我在构建项目的时候开启了SqlCmd模式,并没有什么不同。如何让 Visual Studio 意识到我正在使用 SqlCmd 变量?

【问题讨论】:

【参考方案1】:

不可能在存储过程的任意点使用 SqlCmd 变量。但是,它们可以在部署前或部署后脚本中使用。

http://social.msdn.microsoft.com/Forums/sqlserver/en-US/da4bdb11-fe42-49db-bb8d-288dd1bb72a2/sqlcmd-vars-in-create-table-script?forum=ssdt

【讨论】:

以上是关于Visual Studio:使用 SQLCMD 变量在部署时更改数据库类型的主要内容,如果未能解决你的问题,请参考以下文章

是否有解析 SQLCMD 变量的选项,在 Visual-Studio 模式比较中进行比较?

visual studio里面的vb编写for循环,怎么设置变步长循环?

如何在Visual Studio中检查函数末尾的变量值

Visual Studio 2012 数据库项目 - 文件路径配置

由于不同的病毒扫描程序,Microsoft Visual Studio 的速度变慢

Visual Studio 2015 的 Web 应用程序响应时间变慢