Respuestas:
Como se ha dicho, no hay manera.
Sin embargo, una cosa que hacemos es incluir una verificación rápida en el encabezado de nuestro script, para determinar si el modo SQLCMD está activado (y terminar el script si no):
: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
Hay una razón por la que se usa Severity 20, tiende a eliminar la conexión de inmediato, evitando que se ejecute más código de script, incluso si hay GO
terminadores por lotes más adelante en el script.
Indica problemas del sistema y son errores fatales, lo que significa que la tarea Motor de base de datos que ejecuta una instrucción o lote ya no se está ejecutando. La tarea registra información sobre lo ocurrido y luego finaliza. En la mayoría de los casos, la conexión de la aplicación a la instancia del Motor de base de datos también puede finalizar . Si esto sucede, según el problema, es posible que la aplicación no pueda volver a conectarse.
Los mensajes de error en este rango pueden afectar a todos los procesos que acceden a datos en la misma base de datos y pueden indicar que una base de datos u objeto está dañado. Los mensajes de error con un nivel de gravedad de 19 a 24 se escriben en el registro de errores.
SET NOEXEC ON
una medida de seguridad adicional para evitar que se ejecute cualquier otra cosa en el script.
No.
Pero siempre se puede ejecutar en modo SQLCMD y tener T-SQL en él
Para hacer una distinción clara entre los comandos SQLCMD y Transact-SQL, todos los comandos SQLCMD deben ir precedidos de dos puntos (:).