Risposte:
Come è stato detto, non c'è modo.
Tuttavia, una cosa che facciamo è includere un controllo rapido nell'intestazione dello script, per determinare se la modalità SQLCMD è attiva (e in caso contrario terminare lo script):
: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
C'è un motivo per cui viene utilizzata Severity 20, tende a GO
interrompere immediatamente la connessione, impedendo l'esecuzione di altro codice di script, anche se ci sono terminatori batch più avanti nello script.
Indica i problemi di sistema e sono errori irreversibili, il che significa che l'attività del Motore di database che esegue un'istruzione o un batch non è più in esecuzione. L'attività registra le informazioni su ciò che è accaduto e quindi termina. Nella maggior parte dei casi, può anche terminare la connessione dell'applicazione all'istanza del Motore di database . In questo caso, a seconda del problema, l'applicazione potrebbe non essere in grado di riconnettersi.
I messaggi di errore in questo intervallo possono influire su tutti i processi che accedono ai dati nello stesso database e possono indicare che un database o un oggetto è danneggiato. I messaggi di errore con un livello di gravità compreso tra 19 e 24 vengono scritti nel registro errori.
SET NOEXEC ON
come misura di sicurezza aggiuntiva per impedire l'esecuzione di qualsiasi altra cosa nello script.
No.
Ma puoi sempre eseguire in modalità SQLCMD e avere T-SQL al suo interno
Per fare una chiara distinzione tra i comandi SQLCMD e Transact-SQL, tutti i comandi SQLCMD devono essere preceduti da due punti (:).