2012-05-02 9 views
11

क्या Changed database context to ... संदेश को रोकने का कोई तरीका है जब SQL के टुकड़े में USE database है? sqlcmd के निकास कोड कि ERRORLEVEL के रूप में, कहते हैं, cmd.exe दिया जाता है के साथ यहाँ errorlevel भ्रमित न करें:"परिवर्तित डेटाबेस संदर्भ ..." संदेश को कैसे रोकें

+1

कहाँ आप इन संदेशों मिलता है? मैंने पहले कभी नहीं देखा है। –

+0

@ ta.speot.is आप उन्हें देखते हैं, उदाहरण के लिए, 'SQLCMD.exe' का उपयोग करते समय? –

उत्तर

22

आप sqlcmd की errorlevel स्थापित करने के लिए जो 0. नोट करने के लिए चूक की जरूरत है।

USE [mydb] 
GO 

-- Disable message for next USE command 
:setvar SQLCMDERRORLEVEL 1 
USE [mydb] 
GO 

-- Reenable 
:setvar SQLCMDERRORLEVEL 0 

... 
:

sqlcmd -m 1 <other options> 

:setvar बैच आदेश कोड का एक खंड के लिए इस संदेश को अक्षम करने के लिए, का उपयोग करें:

-m कमांडलाइन विकल्प एक sqlcmd सत्र के सभी के लिए इस संदेश को अक्षम करने के लिए, का उपयोग करें

प्रबंधन स्टूडियो में :setvar (या अन्य SQLCMD बैच आदेश) का उपयोग करने के लिए, आपको उस क्वेरी विंडो के लिए SQLCMD मोड को सक्षम करने की आवश्यकता है (मेनू "क्वेरी/SQLCMD मोड")। आप देखेंगे कि यह सक्षम है, जब ':' से शुरू होने वाली रेखाओं में भूरे रंग की पृष्ठभूमि होती है।

+0

उत्कृष्ट, एक इलाज किया। मदद – SteveC

+0

हाय के लिए धन्यवाद, मुझे डेल्फी का उपयोग करके बनाया गया एप्लिकेशन चलाते समय यह संदेश मिला। मुझे डेटाबेस को संशोधित करने की आवश्यकता है। आपका तरीका एसक्यूएल प्रबंधन स्टूडियो में काम कर रहा है, लेकिन जब मैंने कोड से सीएमडी पास करने की कोशिश की तो मुझे त्रुटि मिली "@P1 'के पास गलत वाक्यविन्यास। क्या किसी के पास इसका समाधान है? – kvsbhavani

+1

@ kvsbhavani की उम्मीद है। 'सेटवर' वाक्यविन्यास तथाकथित "बैच मोड" का हिस्सा है, जिसे केवल SQLCMD.EXE और SSMS द्वारा समर्थित किया जाता है (मेरे उत्तर का अंतिम अनुच्छेद देखें)। यदि आप इसे अपने आप में संभालना चाहते हैं कोड मैं सुझाव देता हूं कि आप SO –

5

एक और विचार आपके एसक्यूएल में तीन भागों के नामों का उपयोग करना है, उदा। बजाय ...

USE Pubs; SELECT name FROM dbo.Authors;

... लिखने ...

SELECT name FROM Pubs.dbo.Authors;

+0

पर एक नया प्रश्न पोस्ट करें पॉइंटर के लिए धन्यवाद ... सुनिश्चित नहीं है कि मैं अपने सभी कोड को असंबद्ध महसूस करता हूं :-) – SteveC

+0

मैंने कोशिश की - यह यहां काम नहीं किया। – Algoman

+0

संभवतः यह काम नहीं करता मुझे क्योंकि कनेक्ट करने के बाद भी मुझे mssql_select_db कॉल था (जो afaik भी एक यूएसई कमांड जारी करता है) ...मैं नहीं जानता कि - मैं हर बार इस्तेमाल करने के बाद एक का चयन करें 1 जोड़ने (user2335044 तरह का सुझाव दिया) – Algoman

1

मेरे मामले में, एक आसान और सरल उपाय ऐसे SELECT 1; के रूप में पहली एक छोटे से क्वेरी चलाने के लिए किया गया था, । संदेश Changed database context... इसलिए इस पहली क्वेरी के साथ जोड़ा गया था और निम्न त्रुटि इस त्रुटि संदेश के बिना पुनर्प्राप्त किए गए थे।

5

मैं SQLCMD को निर्देशिका में अपनी सभी .sql स्क्रिप्ट चलाने के द्वारा अद्यतन जारी करता हूं। लेकिन जब आप एक यूएसई myDB के साथ सबकुछ शुरू करते हैं तो आपको लॉग फ़ाइल में एक दोहराया गया संदर्भ संदेश मिलता है, जो सुस्त है। तो मैं इसके बजाय इस लाइनर का उपयोग करता हूं। यदि संदर्भ वास्तव में बदल गया है, तो आपको अभी भी संदेश मिल जाएगा, जो अच्छा है।

अगर मौजूद है (DB_NAME() का चयन करें जहां DB_NAME() में नहीं ('mydb')) का उपयोग mydb

+0

यह एक बहुत अच्छा विचार है क्योंकि इसका मतलब है मैं (पर SQLCMD मोड चालू करने के लिए बिना) क्वेरी विंडो में स्क्रिप्ट चला सकते हैं द्वारा समस्या हल और बार-बार संदर्भ परिवर्तन आउटपुट की वजह से त्रुटि संदेशों को अस्पष्ट किए बिना SQLCMD के साथ इसका उपयोग करें। – LawrenceF

संबंधित मुद्दे