Respostas:
Como já foi dito, não há como.
No entanto, uma coisa que fazemos é incluir uma verificação rápida no cabeçalho do script, para determinar se o modo SQLCMD está ativado (e encerrar o script, se não estiver):
: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
Há um motivo pelo qual a Gravidade 20 é usada, ela tende a GO
interromper a conexão imediatamente, impedindo a execução de mais código de script, mesmo se houver terminadores em lote posteriormente no script.
Indique problemas no sistema e são erros fatais, o que significa que a tarefa do Mecanismo de Banco de Dados que está executando uma instrução ou lote não está mais em execução. A tarefa registra informações sobre o que ocorreu e depois termina. Na maioria dos casos, a conexão do aplicativo com a instância do Mecanismo de Banco de Dados também pode terminar . Se isso acontecer, dependendo do problema, talvez o aplicativo não consiga se reconectar.
As mensagens de erro nesse intervalo podem afetar todos os processos que acessam dados no mesmo banco de dados e podem indicar que um banco de dados ou objeto está danificado. Mensagens de erro com nível de gravidade de 19 a 24 são gravadas no log de erros.
SET NOEXEC ON
como uma medida de segurança adicional para impedir a execução de qualquer outra coisa no script.
Não.
Mas você sempre pode executar no modo SQLCMD e ter o T-SQL nele
Para fazer uma distinção clara entre comandos SQLCMD e Transact-SQL, todos os comandos SQLCMD precisam ser prefixados com dois pontos (:).