दिलचस्प पोस्ट
हमेशा साइन प्रदर्शित करने के लिए कस्टम संख्यात्मक प्रारूप स्ट्रिंग मैं दो अलग-अलग डोमेन में कुकीज़ का उपयोग कैसे करूं? Printf के% s विनिर्देशक के साथ छपाई के व्यवहार का क्या व्यवहार है? अधिसूचना पर क्लिक करने के बाद आवेदन खोलें आईओएस पर डिवाइस वॉल्यूम को बदलने के लिए – संगीत की मात्रा नहीं आप सी # में वैकल्पिक पैरामीटर कैसे उपयोग कर सकते हैं? मैं एक डिस्प्ले कैसे बना सकता हूं: फ्लेक्स कंटेनर अपनी लिपटे हुई सामग्रियों के साथ क्षैतिज रूप से फैलता है? स्विफ्ट के साथ इंटरनेट कनेक्शन की जांच करें कैसे एक ढेर डेटा संरचना में हटाने के लिए? मैं केवल एक Git रिपॉजिटरी की उपनिर्देशिका कैसे क्लोन करता हूं? एमवीवीएम प्रकाश – अन्य दृश्य मॉडल में संपत्ति का उपयोग कैसे करें मैं पीडीएफ दस्तावेज़ को PHP में एक पूर्वावलोकन छवि में कैसे रूपांतरित कर सकता हूं? दो वर्गों से विस्तार Android दृश्य छाया उपयोगकर्ता द्वारा पुश नोटिफिकेशन सक्षम किए जाने पर iPhone पर निर्धारित करें

डायनेमिक एसक्यूएल – एक्सेक (एसएसएल) बनाम एक्सईसी एसपी_एक्सकाउट्स्क्युलए (एसएसयूएल)

SQL सर्वर में संग्रहीत कार्यविधि में गतिशील SQL कमांड निष्पादित करने के वास्तविक दुनिया के पेशेवरों और विपक्ष क्या हैं

EXEC (@SQL) 

बनाम

 EXEC SP_EXECUTESQL @SQL 

?

वेब के समाधान से एकत्रित समाधान "डायनेमिक एसक्यूएल – एक्सेक (एसएसएल) बनाम एक्सईसी एसपी_एक्सकाउट्स्क्युलए (एसएसयूएल)"

sp_executesql क्वेरी प्लान पुनः उपयोग को प्रोत्साहित करने की अधिक संभावना है sp_executesql का उपयोग करते समय, मापदंड स्पष्ट रूप से कॉलिंग हस्ताक्षर में पहचाने जाते हैं। यह उत्कृष्ट लेख इस प्रक्रिया को बर्बाद करता है ।

बहुधा गतिशील एसक्यूएल के कई पहलुओं के संदर्भ में एरलैंड सोमेरसोग को पढ़ना चाहिए: " द कर्स एंड ब्लेसेसिंग ऑफ डायनामिक एसक्यूएल "

SP_EXECUTESQL के बारे में बड़ी बात यह है कि यह आपको पैरामीट्रैक्ड क्वेरीज़ बनाने की अनुमति देता है जो कि बहुत अच्छी है यदि आप एसक्यूएल इंजेक्शन की देखभाल करते हैं।

माइक्रोसॉफ्ट के sp_executesql लेख का उपयोग करते हुए sp_executesql स्टेटमेंट के बजाय sp_executesql का उपयोग करने की सलाह दी जाती है।

क्योंकि यह संग्रहित प्रक्रिया पैरामीटर प्रतिस्थापन का समर्थन करती है, sp_executesql EXECUTE की तुलना में अधिक बहुमुखी है; और क्योंकि sp_executesql निष्पादन योजना बनाता है, जो SQL सर्वर द्वारा पुन: उपयोग किए जाने की संभावना है, sp_executesql EXECUTE की तुलना में अधिक कुशल है।

तो, दूर ले जाएं: execute वक्तव्य का उपयोग न करेंsp_executesql उपयोग करें

मैं हमेशा इन दिनों sp_executesql का उपयोग करेगा, यह सब वास्तव में EXEC के लिए एक आवरण है जो मापदंडों और चर को नियंत्रित करता है

हालांकि, विकल्प के बारे में भूल नहीं है जब बहुत बड़े डेटाबेस पर प्रश्नों को ट्यूनिंग करते हैं, खासकर जहां आपके पास डेटा एक से अधिक डाटाबेस में फैला हुआ है और सूचकांक स्कैन को सीमित करने के लिए एक कॉन्ट्रैक्ट का उपयोग कर रहे हैं।

जब तक आप OPTION RECOMPILE का उपयोग नहीं करते हैं, तो SQL सर्वर आपकी क्वेरी के लिए एक "एक आकार सभी को फिट बैठता है" निष्पादन योजना बनाने का प्रयास करेगा, और हर बार चलाए जाने पर प्रत्येक इंडेक्स स्कैन करेगा।

यह तलाश की तुलना में बहुत कम कुशल है, और इसका अर्थ यह है कि वह संपूर्ण अनुक्रमित स्कैन कर रहा है जो उन श्रेणियों में बाधित है, जिन्हें आप क्वेरी नहीं कर रहे हैं: @

  1. चर घोषित करें
  2. इसे अपने आदेश के द्वारा सेट करें और गतिशील भागों को जोड़ दें जैसे SP का पैरामीटर मूल्य (यहां @ आईएस सोमवार और आईएसटीड्यूडे स्पैम हैं)
  3. आदेश को निष्पादित करें

     declare @sql varchar (100) set @sql ='select * from #td1' if (@IsMonday+@IsTuesday !='') begin set @sql= @sql+' where PickupDay in ('''+@IsMonday+''','''+@IsTuesday+''' )' end exec( @sql)