Yanıtlar:
Söylendiği gibi, bir yolu yok.
Bununla birlikte, yaptığımız bir şey, SQLCMD modunun açık olup olmadığını belirlemek (ve değilse komut dosyasını sonlandırmak) için komut dosyası başlığımıza hızlı bir kontrol eklemektir:
: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
Önem Derecesi 20'nin kullanılmasının bir nedeni vardır, komut dosyasında GO
daha sonra toplu iş sonlandırıcıları olsa bile, daha fazla komut dosyası kodunun çalışmasını önleyerek bağlantıyı hemen öldürme eğilimindedir .
Sistem sorunlarını belirtin ve önemli hatalardır, yani bir deyim veya toplu iş yürüten Veritabanı Altyapısı görevi artık çalışmaz. Görev, ne olduğu hakkında bilgi kaydeder ve sonra sona erer. Çoğu durumda, Veritabanı Altyapısı örneğine uygulama bağlantısı da sonlanabilir . Bu durumda, soruna bağlı olarak uygulama yeniden bağlanamayabilir.
Bu aralıktaki hata iletileri, aynı veritabanındaki verilere erişen tüm işlemleri etkileyebilir ve bir veritabanı veya nesnenin hasar gördüğünü gösterebilir. Hata düzeyi 19 ile 24 arasında olan hata iletileri hata günlüğüne yazılır.
SET NOEXEC ON
çalışmasını komut başka bir şey önlemek için ilave bir güvenlik önlemi olarak.
Hayır.
Ancak her zaman SQLCMD modunda çalışabilir ve içinde T-SQL kullanabilirsiniz
SQLCMD komutları ve Transact-SQL arasında açık bir ayrım yapmak için, tüm SQLCMD komutlarının önüne iki nokta üst üste (:) eklenmesi gerekir.