SQLCMD modunu bir komut dosyasının içinden etkinleştirebilir miyim?


17

SMSLCMD modunu etkinleştirmek / devre dışı bırakmak için SSMS'yi zorlamak için bir komut dosyasında kullanabileceğim bir yönerge gibi bir şey var mı?

Yanıtlar:


17

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 GOdaha 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 .

Şiddet 20-24 :

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.


Ssms için ilk 2 satır yeterli olacaktır ve sql 2000 Query Analyzer için çalışır, ancak mesaj görüntülenmez.
bernd_k

Ancak komut dosyası bir sonraki GO'dan çalışmaya devam etmez mi?
Dan Nolan

SSMS 2008 R2 kullanıyorum ve 2 satır üretiyor: Meldung 102, Ebene 15, Durum 1, Zeile 1 ':' yakınında yanlış sözdizimi. SQL Server 2000 Query Analyzer'ı kullanarak RAISERROR'u kullanmanız gerekir.
bernd_k

4
Belirtildiği gibi burada , ayrıca ayarlayabilirsiniz SET NOEXEC ONçalışmasını komut başka bir şey önlemek için ilave bir güvenlik önlemi olarak.
Yahoo Serious

Hmm, bu SQLCMD modunun açık olup olmadığını öğrenmek için SQLCMD modunu kullanıyor ... @bernd_k deneyimli olarak SQLCMD modu kapalıyken düzgün çalışmayacağını söyleyebilirim. Ancak,: setvar SQL için kaldırılır / değiştirilirse, o zaman çalışır.
Oak_3260548

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.