it-swarm.asia

هل يمكنني تمكين وضع SQLCMD من داخل برنامج نصي؟

هل هناك شيء مثل التوجيه الذي يمكنني استخدامه في برنامج نصي لفرض SSMS لتمكين/تعطيل وضع SQLCMD؟

17
bernd_k

كما قيل ، لا توجد طريقة.

ومع ذلك ، هناك شيء واحد نقوم به هو تضمين فحص سريع في رأس البرنامج النصي لدينا ، لتحديد ما إذا كان وضع SQLCMD قيد التشغيل (وإنهاء البرنامج النصي إذا لم يكن كذلك):

: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

هناك سبب لاستخدام Severity 20 ، فهو يميل إلى قطع الاتصال على الفور ، ويمنع تشغيل أي رمز نصي إضافي ، حتى إذا كان هناك GO نهاية الدفعة لاحقًا في البرنامج النصي.

شدة 20-24 :

حدد مشاكل النظام والأخطاء الفادحة ، مما يعني أن مهمة Database Engine التي تقوم بتنفيذ عبارة أو مجموعة لم تعد قيد التشغيل. تسجل المهمة معلومات حول ما حدث ثم تنتهي. في معظم الحالات ، قد ينتهي اتصال التطبيق بمثيل مشغل قاعدة البيانات أيضًا . إذا حدث ذلك ، اعتمادًا على المشكلة ، فقد لا يتمكن التطبيق من إعادة الاتصال.

يمكن أن تؤثر رسائل الخطأ في هذا النطاق على جميع العمليات التي تصل إلى البيانات في نفس قاعدة البيانات وقد تشير إلى تلف قاعدة بيانات أو كائن. تتم كتابة رسائل الخطأ بمستوى خطورة من 19 إلى 24 في سجل الأخطاء.

17
Dan Nolan

لا.

ولكن يمكنك دائمًا تشغيل وضع SQLCMD ولديك T-SQL فيه

لتمييز واضح بين أوامر SQLCMD و Transact-SQL ، يجب أن تكون جميع أوامر SQLCMD مسبوقة بنقطتين (:).

7
gbn