Answers:
如前所述,这是没有办法的。
但是,我们要做的一件事是在脚本头中进行快速检查,以确定SQLCMD模式是否打开(如果没有,则终止脚本):
:setvar DatabaseName "MyDatabase"
GO
IF ('$(DatabaseName)' = '$' + '(DatabaseName)')
RAISERROR ('This script must be run in SQLCMD mode. Disconnecting.', 20, 1) WITH LOG
GO
-- The below is only run if SQLCMD is on, or the user lacks permission to raise fatal errors
IF @@ERROR != 0
SET NOEXEC ON
GO
PRINT 'You will not see this unless SQLCMD mode is on'
-- Rest of script goes here
GO
SET NOEXEC OFF
GO
使用严重性20是有原因的,它会立即GO
终止连接,即使脚本中稍后有批处理终止符,也可能阻止脚本代码的运行。
指示系统问题并且是致命错误,这意味着正在执行语句或批处理的数据库引擎任务不再运行。该任务记录有关发生的信息,然后终止。在大多数情况下,与数据库引擎实例的应用程序连接也可能会终止。如果发生这种情况,则取决于问题,该应用程序可能无法重新连接。
此范围内的错误消息可能会影响访问同一数据库中数据的所有进程,并且可能表明数据库或对象已损坏。严重级别为19到24的错误消息将写入错误日志。
SET NOEXEC ON
作为一个附加的安全措施,以防止其他任何脚本运行。