गणना कॉलम में उपयोग किया जाने वाला स्केलर फ़ंक्शन, फ़ंक्शन को अपडेट करने का सबसे साफ तरीका क्या है?


10

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


4
मैंने इसे केवल आंशिक रूप से डमी फ़ंक्शंस बनाकर वास्तविक रूप से हल किया। बेशक, अगर हस्ताक्षर बदल जाता है, तो यह फिर से है।

3
दुर्भाग्य से, मुझे नहीं लगता कि ऐसा करने का कोई "जादू" या "क्लीनर" तरीका है। यदि आपको फ़ंक्शन को संशोधित करने की आवश्यकता है - आपको कॉलम को ड्रॉप करना होगा, फ़ंक्शन को संशोधित करना होगा, और सभी कॉलमों को फिर से जोड़ना होगा। इसके आसपास कोई रास्ता नहीं।
marc_s

@marc_s अच्छी तरह से यह एक शॉट के लायक है, यहाँ बहुत सारे स्मार्ट लोग हैं :)
robertc

उपरोक्त टिप्पणियों से सहमत हैं। सोचा कि यहाँ SYNONYMs के लिए कुछ मदद की पेशकश की गुंजाइश हो सकती है (गणना किए गए कॉलम में एक SYNONYM का संदर्भ) - लेकिन आप एक बार किसी अन्य वस्तु को "पुनर्निर्देशित" करने के लिए बनाए गए समानार्थक शब्द को बदल नहीं सकते।
AdaTheDev

1
सीएलआर यूडीटी की परिभाषा को अद्यतन करने के रूप में कहीं भी दर्दनाक नहीं है (यहां तक ​​कि जब परिवर्तन एक विधि के लिए सिर्फ एक मोड़ है और भंडारण प्रतिनिधित्व को बिल्कुल प्रभावित नहीं करता है)
मार्टिन स्मिथ

जवाबों:


2

यह अधिक काम हो सकता है लेकिन इसे (लगभग) आपको जो मिलना चाहिए, वह मिलना चाहिए:

1 - एक नई तालिका बनाएं जिसमें मुख्य तालिका और अद्यतन फ़ंक्शन से सिर्फ आपका पीके है।

2 - अपना पुराना कॉलम ड्रॉप करें

3 - अपनी पुरानी टेबल का नाम कुछ इस तरह रखें TableName_Base

4 - एक VIEWऐसा बनाएं जो आपकी मुख्य तालिका में आपकी लुकिंग टेबल में शामिल हो, जिस क्रम में आप उन्हें देखना चाहते हैं। जो भी आपकी मूल तालिका का नाम था उसे देखें।

यह संभावित रूप से कुछ मुद्दों के साथ पैदा करेगा INSERTSऔर UPDATESयद्यपि आप एक दृश्य के माध्यम से एक्सेस करेंगे। इससे निपटने के लिए, आप या तो सीधे तालिका में सम्मिलित कर सकते हैं, दृश्य को दरकिनार करते हुए।


स्तंभों को हटाने और फिर से जोड़ने के रूप में अधिक काम और जोखिम के समान स्तर जैसा लगता है।
रोजबार्क

1
@robertc यदि यह एक उच्च लेन-देन का माहौल है, तो यह कम विघटनकारी होगा, लेकिन हाँ यह अभी भी बहुत गड़बड़ है।
जेएनके
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.