我们正在使用 Visual Studio Database Professional,它大量使用 SQLCMD 变量来区分部署时的环境。
我知道有几个指令可用于设置上下文(例如 :connect 用于服务器名称)。脚本本身有没有办法强制执行 SQLCMD 模式?我们部署过程的一部分是让 DBA 检查并执行脚本,这将是一个很好的安全网(所以我不必提醒他们将执行模式设置为 SQLCMD)。
不是解决方案,但作为一种解决方法,您可以将脚本嵌入到一些警告中。 这篇文章启发了我这段代码:
SET NOEXEC OFF; -- previous execution may have toggled it
:setvar IsSqlCmdEnabled "True"
GO
IF ('$(IsSqlCmdEnabled)' = '$' + '(IsSqlCmdEnabled)')
BEGIN
PRINT('Use SqlCmd-mode!!');
SET NOEXEC ON;
-- RAISERROR ('This script must be run in SQLCMD mode.', 20, 1) WITH LOG
END
ELSE
BEGIN
PRINT('Using SqlCmd-mode')
-- insert the code you really want to execute:
-- ...
END
SET NOEXEC OFF; -- do not disable next execution in this session
这似乎是不可能的。我什至检查了 SSMS 项目模式。
但是,如果您在 BIDS 中创建数据库项目,则预部署和部署后脚本默认以 SQLCMD 模式运行。
我知道这不是您想要的答案,但这是我可以为您提供的最好的答案,无需创建一个自定义 SSMS 插件,该插件将根据脚本文件中的某些文本为您完成。