क्या मैं स्क्रिप्ट के अंदर से SQLCMD मोड को सक्षम कर सकता हूं?


17

वहाँ एक निर्देश की तरह कुछ है जो मैं स्क्रिप्ट में उपयोग कर सकता हूँ SSMS को SQLCMD मोड को सक्षम / अक्षम करने के लिए मजबूर करने के लिए?

जवाबों:


17

जैसा कि कहा गया है, कोई रास्ता नहीं है।

हालाँकि, एक चीज़ जो हम अपने स्क्रिप्ट हेडर में क्विक चेक को शामिल करते हैं, वह यह निर्धारित करने के लिए करते हैं कि 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

एक कारण है 20 गंभीरता का उपयोग किया जाता है, यह तुरंत कनेक्शन को मारने के लिए जाता है, किसी भी अधिक स्क्रिप्ट कोड को चलाने से रोकता है, भले ही GOस्क्रिप्ट में बाद में बैच टर्मिनेटर हों।

गंभीरता 20-24 :

संकेत प्रणाली की समस्याएं और घातक त्रुटियां हैं, जिसका अर्थ है कि डेटाबेस इंजन कार्य जो एक स्टेटमेंट या बैच निष्पादित कर रहा है, अब नहीं चल रहा है। कार्य क्या हुआ और फिर समाप्त हो जाता है के बारे में जानकारी दर्ज करता है। ज्यादातर मामलों में, डेटाबेस इंजन के उदाहरण के लिए आवेदन कनेक्शन भी समाप्त हो सकता है । यदि ऐसा होता है, तो समस्या के आधार पर, एप्लिकेशन पुन: कनेक्ट करने में सक्षम नहीं हो सकता है।

इस श्रेणी के त्रुटि संदेश एक ही डेटाबेस में डेटा तक पहुँचने की सभी प्रक्रियाओं को प्रभावित कर सकते हैं और संकेत दे सकते हैं कि डेटाबेस या ऑब्जेक्ट क्षतिग्रस्त है। 19 से 24 तक की गंभीरता स्तर वाले त्रुटि संदेश त्रुटि लॉग में लिखे गए हैं।


Ssms के लिए पहली 2 लाइनें पर्याप्त होंगी और sql 2000 क्वेरी एनालाइज़र के लिए यह काम करता है, लेकिन संदेश प्रदर्शित नहीं होता है।
bernd_k

लेकिन क्या स्क्रिप्ट सिर्फ अगले GO से निष्पादित नहीं होगी?
दान नोलन

मैं एसएसएमएस 2008 आर 2 का उपयोग कर रहा हूं और वहां 2 लाइनें उत्पन्न होती हैं: मेल्डुंग 102, ईबेने 15, स्थिति 1, ज़ाइल 1 गलत सिंटैक्स 'के पास:'। SQL Server 2000 क्वेरी विश्लेषक का उपयोग करके आपको RAISERROR का उपयोग करना होगा।
bernd_k

4
जैसा कि यहां बताया गया है , आप SET NOEXEC ONस्क्रिप्ट में किसी और चीज को चलाने से रोकने के लिए एक अतिरिक्त सुरक्षा उपाय के रूप में भी सेट कर सकते हैं ।
याहू सीरियस

हम्म, यह SQLCMD मोड चालू है या नहीं यह जानने के लिए SQLCMD मोड का उपयोग कर रहा है ... मैं कहूंगा कि SQLCMD मोड बंद होने पर यह ठीक से काम नहीं करेगा, जैसा कि @bernd_k ने अनुभव किया है। हालाँकि, यदि: setvar को निकाल दिया जाता है / SQL के लिए बदल दिया जाता है, तो यह काम करेगा।
ओक_3260548

7

नहीं।

लेकिन आप हमेशा SQLCMD मोड में चल सकते हैं और इसमें T-SQL हो सकते हैं

SQLCMD कमांड और Transact-SQL के बीच एक स्पष्ट अंतर करने के लिए, सभी SQLCMD कमांड को एक कोलोन (:) के साथ उपसर्ग करने की आवश्यकता है।


क्या यह अभी भी SQL Server 2012/2014/2016 के लिए मान्य है?
जॉन उर्फ ​​हॉट

1
@ hot2use: हाँ, मैंने इसे २०१४/२०१६ को इस्तेमाल किया है
gbn
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.