我们使用的是Visual Studio Database Professional,它大量使用SQLCMD变量来部署时区分不同的环境。是否可以在脚本中自动强制执行SQLCMD模式?
我知道有几个指令可用于设置上下文(如:连接服务器名称)。脚本本身是否有强制执行SQLCMD模式的方法?我们的部署过程的一部分是让DBA检查并执行脚本,这将是一个很好的安全网(所以我不必提醒他们将其执行模式设置为SQLCMD)。
我们使用的是Visual Studio Database Professional,它大量使用SQLCMD变量来部署时区分不同的环境。是否可以在脚本中自动强制执行SQLCMD模式?
我知道有几个指令可用于设置上下文(如:连接服务器名称)。脚本本身是否有强制执行SQLCMD模式的方法?我们的部署过程的一部分是让DBA检查并执行脚本,这将是一个很好的安全网(所以我不必提醒他们将其执行模式设置为SQLCMD)。
不是一个解决方案,但作为解决方法,您可以在一些警告中嵌入您的脚本。 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然后立即检查它的值),但他们还将SET NOEXEC ON作为一个添加安全措施以防止脚本中的其他内容运行。 – 2013-01-21 15:44:37
@Micheal,谢谢你的提示,我加了'NOEXEC'。 (未测试,此时没有SqlServer,但看起来很简单。) – 2013-01-25 09:00:03
仅适用于第一次运行 – Paul 2013-05-09 08:29:32
这似乎不可能。我甚至检查了SSMS项目模式。
但是,如果您在BIDS中创建数据库项目,则预部署&后部署脚本默认以SQLCMD模式运行。
我知道这不是你想要的答案,但它是最好的,我可以给你没有创造一个自定义的SSMS插件,将基于脚本文件中的一些文本为你做。
+1正在寻找类似的解决方案。有没有发现如何做到这一点? – 2010-11-12 16:17:58
不,还在等。我很犹豫开始赏金。 – 2011-02-14 20:49:28