Jawaban:
Seperti yang telah dikatakan, tidak ada jalan.
Namun, satu hal yang kami lakukan adalah memasukkan pemeriksaan cepat di header skrip kami, untuk menentukan apakah mode SQLCMD aktif (dan menghentikan skrip jika tidak):
: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
Ada alasan Severity 20 digunakan, itu cenderung mematikan koneksi segera, mencegah kode skrip lagi dari berjalan, bahkan jika ada GO
batch terminator nanti dalam skrip.
Tunjukkan masalah sistem dan merupakan kesalahan fatal, yang berarti bahwa tugas Mesin Basis Data yang menjalankan pernyataan atau kumpulan tidak lagi berjalan. Tugas mencatat informasi tentang apa yang terjadi dan kemudian berakhir. Dalam kebanyakan kasus, koneksi aplikasi ke mesin Database juga dapat berakhir . Jika ini terjadi, tergantung pada masalahnya, aplikasi mungkin tidak dapat terhubung kembali.
Pesan kesalahan dalam rentang ini dapat mempengaruhi semua proses mengakses data dalam database yang sama dan dapat menunjukkan bahwa database atau objek rusak. Pesan kesalahan dengan tingkat keparahan dari 19 hingga 24 ditulis ke log kesalahan.
SET NOEXEC ON
sebagai langkah keamanan tambahan untuk mencegah hal lain dalam skrip berjalan.
Tidak.
Tetapi Anda selalu dapat menjalankan dalam mode SQLCMD dan memiliki T-SQL di dalamnya
Untuk membuat perbedaan yang jelas antara perintah SQLCMD dan Transact-SQL, semua perintah SQLCMD, harus diawali dengan tanda titik dua (:).