8

मेरे पास एक ऐसा एप्लिकेशन है जो संग्रहित प्रक्रियाओं (SQL 2005/2008) पर बहुत अधिक निर्भर करता है। हम एक मामूली अपडेट कर रहे हैं जो इन संग्रहित प्रक्रियाओं में से 25-35 को संशोधित करेगा। एप्लिकेशन ऐसा है कि संग्रहीत प्रक्रिया के दोनों संस्करण उपलब्ध होना चाहिए।संग्रहित प्रक्रियाओं के लिए संस्करण परिवर्तन

यह एप्लिकेशन का प्रमुख संस्करण 4 है और आमतौर पर हम प्रत्येक नए संस्करण के साथ डेटा संरचना को पूरी तरह से संशोधित करने में सक्षम हैं। हालांकि इस मामले में, हम ऐसा नहीं कर सकते हैं।

यहाँ मेरी 2 विकल्प मैं

  1. लेकर आए हैं एक "2" प्रत्येक संग्रहीत प्रक्रिया के संस्करण बनाने हैं। अगर मेरे पास GetUser नामक एक प्रक्रिया थी जिसे getUser2 बनाते हैं। इसका नकारात्मक पक्ष यह है कि संग्रहित प्रक्रियाओं में से # प्रत्येक संस्करण परिवर्तन

  2. प्रत्येक संग्रहीत प्रक्रिया में vvers को पैरामीटर जोड़ें जो v1 के लिए डिफ़ॉल्ट है। यह संग्रहीत प्रक्रियाओं की संख्या को नीचे रखेगा लेकिन प्रत्येक संग्रहीत प्रक्रिया को

किसी के पास इस पर कोई विचार है? कोई अन्य चालाक विचार?

कोड़ी

+0

+1 इस प्रश्न का उत्तर मुझे एक परियोजना में भी मदद करेगा। – Dusty

उत्तर

1

मुझे यकीन है कि के लिए है कि दो अलग अलग फ़ाइलों को बनाने नहीं होगा।

शायद आपके स्रोत नियंत्रण में आपको अपने सभी संस्करणों की एक शाखा बनाना चाहिए, और फिर अपने अगले संस्करण के साथ एक नई शाखा बनाना चाहिए, फिर आप दोनों शाखाओं को अपने सिस्टम पर अलग फ़ोल्डरों के रूप में शामिल कर सकते हैं और अपना व्यावसायिक तर्क बिंदु कर सकते हैं सही स्थान

यह समाधान थोड़ा सा मैला हो सकता है, लेकिन मुझे लगता है कि यह कई बुराइयों में से कम है।

भले ही, वास्तव में आपके संग्रहीत प्रक्रिया कोड को संस्करणित करना मेरी राय में एक निश्चित जरूरी है।

1

मैं आपके द्वारा प्रदान किया गया दूसरा विकल्प सुझाता हूं। एक संस्करण पैरामीटर का प्रयोग करें। यह वही सेवाएं है जो वे बहुत समय पहले एपीआई का उपयोग शुरू करने वाले ऐप्स के कोड को तोड़ नहीं देते हैं लेकिन एपीआई किसी बिंदु पर अपडेट की जाती है।

मुझे यकीन है कि कुछ तर्क हैं जो दो संस्करणों के बीच समान हैं जो आप proc या कुछ के नीचे में सारण कर सकते हैं। या संभावित तत्वों के लिए संभावित रूप से कार्य बनाते हैं और उन कार्यों को अपने बड़े IF/SWTICH ब्लॉक में कॉल करते हैं।

5

मैं इस अवसर को संग्रहित प्रक्रियाओं से ओआरएम या किसी अन्य दृष्टिकोण में स्थानांतरित करने का अवसर दूंगा। आपके प्रस्तावित समाधानों के लिए दोनों प्रकार के कोड परिवर्तन की आवश्यकता होगी ताकि यह तय किया जा सके कि किस संग्रहीत प्रक्रिया का उपयोग करना है। इसके बजाय मैं यह तय करता हूं कि संग्रहित प्रक्रियाओं या ओआरएम का उपयोग करना है या नहीं। मैं अधिकांश संग्रहीत प्रक्रियाओं को समाप्त करने की योजना भी तैयार करूंगा।

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

(संग्रहीत प्रक्रियाओं को प्यार करने वाले अन्य लोगों के लिए। मैं यह नहीं कह रहा कि वे बुरे हैं। मुझे यकीन है कि संग्रहीत प्रक्रियाओं का उपयोग करके इस तरह की चीज को संभालने के लिए चालाक दृष्टिकोण हैं, लेकिन अगर ऐसा दृष्टिकोण इस्तेमाल किया जा रहा है, तो यह सवाल नहीं पूछा गया था।)

2

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

जब पुराने तर्क की आवश्यकता नहीं है तो आप बस इसे sProcs

0

से हटा दें, मैं निम्नलिखित दो कारणों के लिए दो फाइल विकल्प के लिए जाऊंगा:

  • हस्ताक्षर, कि मानकों की संख्या संस्करणों
  • प्रत्येक संग्रहीत प्रक्रिया सभी सशर्त कोड
0

से त्रुटियों की इसलिए कम मौका सरल हो सकता है, के बीच बदल सकते हैं हम में बड़े पैमाने पर संग्रहित प्रक्रियाओं का उपयोग करते थे मेरी कंपनी, लेकिन (ज्यादातर) देर से ओआरएम की तरफ से दूर चले गए हैं।

हम अभी भी उनका उपयोग करते हैं, और हमारा संस्करण वही है जैसा कि पहले था: हर बार जब हम संग्रहीत प्रक्रियाओं को संशोधित करते हैं (जो केवल कुछ लोगों को करने का अधिकार है), हम एसक्यूएल को सहेजते हैं, और स्टोर करते हैं हमारे संस्करण नियंत्रण में .sql फ़ाइल।

यह अपूर्ण है और हम स्रोत नियंत्रण और हमारी कोड फ़ाइलों के बीच बहुत अधिक एकीकरण खो देते हैं (क्योंकि टीएफएस में कोई SQL सर्वर एकीकरण नहीं है) लेकिन यह कोई स्रोत नियंत्रण से बेहतर नहीं है।

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

0

एक और दिलचस्प तरीका कोड के संस्करण के साथ डेटाबेस तालिका में आपकी संग्रहीत प्रक्रियाओं के लिए सभी कोड को स्टोर करना होगा। फिर आपके पास "फ्रंट एंड" प्रो है जो अनुरोधों को संभालती है और फिर, संस्करण के आधार पर गतिशील रूप से एक प्रो बनाने और इसे निष्पादित करने के लिए। जब यह किया जाता है तो यह proc को छोड़ सकता है।

दीवार सुझाव से बस एक बंद करें लेकिन आपके लिए काम कर सकता है।

+0

यह बहुत ही गड़बड़ लगता है ... कुछ आसान बेहतर नहीं होगा? – Jeff

+0

हाँ ... लेकिन पोस्टर ने कहा कि वह बॉक्स विचारों से बाहर निकल रहा था ... मैं इसे इस तरह से कभी नहीं करूँगा। – thomas

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