是否可以在脚本中自动强制SQLCMD模式?

Nic*_*ebb 12 sql ssms sqlcmd

我们正在使用Visual Studio Database Professional,它在部署时大量使用SQLCMD变量来区分环境.

我知道有几个指令可用于设置上下文(例如:connect for server name).脚本本身是否有办法强制执行SQLCMD模式?我们部署过程的一部分是让DBA检查并执行脚本,这将是一个很好的安全网(所以我不必提醒他们将执行模式设置为SQLCMD).

Yah*_*ous 4

这不是一个解决方案,但作为一种解决方法,您可以将脚本嵌入到一些警告中。 这篇文章启发了我编写这段代码:

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
Run Code Online (Sandbox Code Playgroud)

  • @Paul:那是因为“NOEXEC”在此会话中仍然处于打开状态,并且命令(包括打印)将不会被执行。如果您使用“SET NOEXEC OFF”结束(和/或开始)命令序列,它将重复。为了避免人们必须输入(并思考)的麻烦,我还将其添加到示例中。 (2认同)