【问题标题】:Is it possible to automatically force SQLCMD mode in script?是否可以在脚本中自动强制 SQLCMD 模式?
【发布时间】:2010-08-09 15:21:04
【问题描述】:

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

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

【问题讨论】:

  • +1 正在寻找类似的解决方案。有没有知道怎么做?
  • 不,还在等待。我对开始赏金犹豫不决。

标签: sql sqlcmd ssms


【解决方案1】:

不是解决方案,但作为一种变通方法,您可以将脚本嵌入到一些警告中。 This post 启发了我这段代码:

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

【讨论】:

  • 我知道这已经晚了,但对于以后发现这个的其他人来说:VS2010 发布脚本基本上是这样做的(他们设置了一个特殊的__IsSqlCmdEnabled var 然后立即检查它的值)但他们也@ 987654324@ 作为附加的安全措施,以防止脚本中的任何其他内容运行。
  • @Micheal,感谢您的提示,我添加了 NOEXEC。 (未经测试,目前没有 SqlServer,但看起来很简单。)
  • @Paul:那是因为NOEXEC 在此会话中仍处于打开状态,并且不会执行命令(包括打印)。如果您以SET NOEXEC OFF 结束(和/或开始)命令序列,它将重复。为了避免人们不得不输入(并考虑)的麻烦,我还将把它添加到示例中。
【解决方案2】:

这似乎是不可能的。我什至检查了 SSMS 项目模式。

但是,如果您在 BIDS 中创建数据库项目,则部署前和部署后脚本默认以 SQLCMD 模式运行。

我知道这不是您想要的答案,但这是我可以为您提供的最好的答案,无需创建自定义 SSMS 插件,该插件将根据脚本文件中的某些文本为您完成。

【讨论】:

    猜你喜欢
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    相关资源
    最近更新 更多