2011-12-09 9 views
8

जोड़ने से SQL सर्वर प्रबंधन स्टूडियो को रोकें I SQL प्रबंधन स्टूडियो (10.50.2500.0) को मैं प्रत्येक संग्रहित प्रक्रिया की शुरुआत में जोड़ने से कैसे रोकूं जब मैं राइट-क्लिक/संशोधित करता हूं?ANSI_NULLS और QUOTED_IDENTIFIER

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

इनमें से कोई भी सेटिंग मेरे लिए उपयोगी नहीं है। ANSI_NULLS चालू और QUOTED_IDENTIFIER चालू मेरे सभी सर्वर, डीबी और कनेक्शन पर सेट है। इसके अलावा, मैं डबल कोट्स (मैंने आरक्षित शब्दों के लिए ब्रैकेट्स का उपयोग नहीं किया) और मेरे सभी शून्य फ़ील्ड का उपयोग कभी नहीं किया जब मैं आवश्यक हो तो आईएस न्यूल का सही उपयोग करता हूं।

हर बार जब मैं एक प्रक्रिया संपादित करता हूं तो सेटिंग्स को हटा देता हूं। मेरी सभी प्रक्रियाओं ने उन्हें ठीक से सेट किया है और यह मेरे पर्यावरण में कभी नहीं बदलेगा। द्वारा सत्यापित:

SELECT uses_ansi_nulls, uses_quoted_identifier 
FROM sys.sql_modules 
WHERE object_id = object_id('proc_name') 
+4

मैं के लिए एक साधन नहीं मिल सकता है:

"ANSI_NULLS QUOTED_IDENTIFIER संग्रहीत प्रक्रिया" के लिए एक त्वरित गूगल खोज करना, शीर्ष परिणाम निम्न आलेख कि विकल्प स्पष्ट करने के लगता है, और उनके प्रभाव बहुत स्पष्ट रूप से है ऐसा करें (आप उन्हें 'टूल्स -> विकल्प -> एसक्यूएल सर्वर ऑब्जेक्ट एक्सप्लोरर -> स्क्रिप्टिंग') में दिखाई देने की उम्मीद करेंगे, लेकिन शायद आप उन्हें वैसे भी नहीं हटाना चाहते हैं (वे आपको किस समस्या का कारण बना रहे हैं?) –

+0

हाँ ऐसा लगता है कि यह जगह होना चाहिए। यह खीझ दिलाने वाला है। वे मुझे एकमात्र समस्या का कारण यह है कि वे अनावश्यक और अपशिष्ट स्थान हैं। मैंने आगे बताने के लिए सवाल को अद्यतन किया। – ThinkingStiff

उत्तर

7

सुनिश्चित नहीं हूं कि यह एक जवाब या एक बेकार गैर जवाब के रूप में गिना जाता है, लेकिन Damien_The_Unbeliever के रूप में सुझाव आप पूरी तरह SSMS इन पंक्तियों को स्क्रिप्ट को रोकने के लिए नहीं करना चाहती। चूंकि वे sql_modules तालिका में हैं, इसलिए वे SQL कोड के साथ संग्रहीत प्रक्रिया की परिभाषा का एक अभिन्न अंग बनाते हैं। इसलिए उन्हें आपके SQL कोड से अधिक "बंद" नहीं किया जा सकता है।

आप बनाते हैं/जब संग्रहीत प्रक्रिया बनाया गया था/परिभाषित, तो आप उस संग्रहीत प्रक्रिया के व्यवहार स्थायी रूप से बदल , प्रयुक्त होने वाले बोर्ड एक अलग ANSI_NULLS विकल्प मान है कि एक कनेक्शन से एक संग्रहीत प्रक्रिया को बदल!

यही कारण है कि SSMS (और किसी भी आधा सभ्य एसक्यूएल वस्तु पटकथा उपकरण) होगा हमेशा उत्पादन इन पंक्तियों के लिए है - क्योंकि अगर आप उन्हें हटाने या उन्हें बदलने के लिए, आप संग्रहीत प्रक्रिया की परिभाषा बदल रहे हैं (हटाने के उन्हें, विशेष रूप से, बुरा है क्योंकि इसका मतलब यह है कि संग्रहित प्रक्रिया का व्यवहार, यह किस कनेक्शन से प्रकाशित होता है, इस पर निर्भर करता है)। http://ranjithk.com/2010/01/10/understanding-set-quoted_identifier-onoff/

+1

अगर कोई समझ में नहीं आया कि वे क्या कर रहे थे, तो शायद ये उपयोगी सेटिंग्स होंगे। और उन्हें हटाकर मैं केवल संग्रहित प्रक्रिया की परिभाषा बदल रहा हूं यदि मेरा डिफ़ॉल्ट proc से अलग है। अगर कोई अपने कार्यों के परिणामों को जानता है, तो वे उनको हटाने में सक्षम होना चाहिए। इनमें से भविष्य के डिफ़ॉल्ट भी बदले जाने में सक्षम नहीं होंगे। मैंने बेहतर तरीके से व्याख्या करने के लिए अपना प्रश्न अपडेट किया। एक अच्छा अवलोकन के लिए +1। – ThinkingStiff

+0

@ थिंकिंगस्टिफ़ - अंतर यह है कि संग्रहित प्रक्रिया बनाई जाने पर हमेशा लिखे गए सेटिंग्स को कैप्चर किया जाता है - वे प्रक्रिया के परिभाषा का एक बहुत ही वास्तविक तरीके से होते हैं, जबकि किसी भी अन्य सेटिंग्स का मूल्यांकन रनटाइम पर किया जाता है, जब प्रक्रिया निष्पादित किया जाता है। –

+0

हाँ, मैंने अपनी टिप्पणी को संपादित किया कि वे अच्छे उदाहरण नहीं थे। – ThinkingStiff

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