Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在脚本中自动强制使用SQLCMD模式?_Sql_Sqlcmd_Ssms - Fatal编程技术网

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

是否可以在脚本中自动强制使用SQLCMD模式?,sql,sqlcmd,ssms,Sql,Sqlcmd,Ssms,我们使用的是VisualStudioDatabaseProfessional,它在部署时大量使用SQLCMD变量来区分环境 我知道有几个指令可用于设置上下文(例如:connect for server name)。脚本本身是否有强制执行SQLCMD模式的方法?我们部署过程的一部分是让DBA检查并执行脚本,这将是一个很好的安全网(因此我不必提醒他们将执行模式设置为SQLCMD)。这似乎不可能。我甚至检查了SSMS项目模式 但是,如果在BIDS中创建数据库项目,则默认情况下,部署前和部署后脚本以SQ

我们使用的是VisualStudioDatabaseProfessional,它在部署时大量使用SQLCMD变量来区分环境


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

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

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


我知道这不是你想要的答案,但这是我能给你的最好的答案,我不需要根据脚本文件中的一些文本创建一个自定义SSMS插件来为你做这件事。

这不是一个解决方案,但作为一种解决办法,你可以将脚本嵌入一些警告中。这段代码启发了我:

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

+1寻找类似的解决方案。知道怎么做吗?不,还在等。我对开始悬赏犹豫不决。我知道这已经很晚了,但对于将来发现这一点的任何人来说:VS2010发布脚本基本上就是这样做的(它们设置了一个特殊的
\uu IsSqlCmdEnabled
var,然后立即检查它的值)但是他们也
将NOEXEC设置为ON
作为一种附加的安全措施,以防止脚本中的任何其他内容运行。@Micheal,谢谢你的提示,我添加了
NOEXEC
。(未经测试,目前没有SqlServer,但它看起来足够简单。)@Paul:这是因为此会话的
NOEXEC
仍处于打开状态,并且不会执行命令(包括打印)。如果在
SET NOEXEC OFF
的情况下结束(和/或启动)命令序列,它将重复。为了省去人们打字的麻烦(想想看),我还将把它添加到示例中。