SQL सर्वर बिल्ट-इन फ़ंक्शंस के संग्रह के साथ शिप करता है जो आपको विभिन्न प्रकार के ऑपरेशन करने में सक्षम बनाता है। प्रत्येक अंतर्निहित फ़ंक्शन एक विशिष्ट उद्देश्य को पूरा करता है, और इसे संशोधित नहीं किया जा सकता है। यदि कोई फ़ंक्शन आपके उद्देश्य को पूरा करता है, तो आप आगे बढ़ सकते हैं और उसका उपयोग कर सकते हैं।
लेकिन क्या होगा यदि आपको कोई ऐसा कार्य नहीं मिल रहा है जो आपके उद्देश्य को पूरा करता हो?
फिर यह अपना खुद का उपयोगकर्ता-परिभाषित फ़ंक्शन लिखने का समय है।
उपयोगकर्ता-परिभाषित फ़ंक्शन क्या है?
एक उपयोगकर्ता-परिभाषित फ़ंक्शन (यूडीएफ) एक नियमित है जो पैरामीटर ले सकता है, गणना या अन्य क्रियाएं कर सकता है, और परिणाम लौटा सकता है। और जैसा कि नाम से पता चलता है, यह उपयोगकर्ता द्वारा परिभाषित और बनाया गया है। इस मामले में, "उपयोगकर्ता" SQL प्रोग्रामर, DBA, या जिसने भी फ़ंक्शन लिखा है।
यूज़र-डिफ़ाइंड फ़ंक्शन शब्द इसे SQL सर्वर के साथ शिप किए गए बिल्ट-इन फ़ंक्शंस से अलग करता है।
आप निर्दिष्ट कर सकते हैं कि यूडीएफ किसी भी पैरामीटर को स्वीकार करेगा या नहीं, और यदि हां, तो उनके नाम, डेटा प्रकार इत्यादि। उदाहरण के लिए, आप एक यूडीएफ लिख सकते हैं जो उत्पाद आईडी को तर्क के रूप में स्वीकार करता है। फ़ंक्शन तब इसकी गणना में इसका उपयोग कर सकता है। इसका मतलब है कि फ़ंक्शन का आउटपुट उस इनपुट पर निर्भर करेगा जो इसे लागू होने पर इसे प्रदान किया जाता है।
एक बार UDF बन जाने के बाद, इसे लागू किया जा सकता है।
उपयोगकर्ता द्वारा परिभाषित फ़ंक्शन को लागू करना
जब फ़ंक्शन बनाया जाता है तो फ़ंक्शन के अंदर कोड निष्पादित नहीं होता है। यह केवल तभी क्रियान्वित होता है जब फ़ंक्शन आह्वान होता है .
किसी फ़ंक्शन को "आह्वान" करना कभी-कभी फ़ंक्शन को "कॉलिंग" के रूप में संदर्भित किया जाता है। यह तब होता है जब आपको वह कार्य करने के लिए कार्य मिलता है जो इसे करने के लिए किया गया था। मूल रूप से, आप एक फ़ंक्शन बनाते हैं, और फिर यह वहीं बैठता है जिसे आमंत्रित किया जाना है।
आप अपने टी-एसक्यूएल कोड से यूडीएफ का आह्वान कर सकते हैं, जैसे आप सिस्टम फ़ंक्शन को कॉल करते हैं। उदाहरण के लिए, आप एक UDF का उपयोग WHERE
. में कर सकते हैं SELECT
. के परिणामों को कम करने के लिए क्लॉज बयान। आप इसे वापस लौटने के लिए कॉलम की सूची में भी इस्तेमाल कर सकते हैं।
यूडीएफ का उपयोग गणना किए गए कॉलम में भी किया जा सकता है। यह आसान हो सकता है यदि आपको किसी अन्य कॉलम में डेटा तक पहुंचने के लिए कभी भी गणना किए गए कॉलम की आवश्यकता होती है।
पैरामीटर
एक उपयोगकर्ता-परिभाषित फ़ंक्शन अधिकतम 1024 इनपुट पैरामीटर स्वीकार कर सकता है। हालांकि, यदि आवश्यक हो, तो आप बिना किसी पैरामीटर के किसी फ़ंक्शन को परिभाषित कर सकते हैं।
बिना किसी पैरामीटर के बिल्ट-इन फ़ंक्शन का एक उदाहरण है GETDATE()
. यह फ़ंक्शन केवल वर्तमान डेटाबेस सिस्टम टाइमस्टैम्प लौटाता है। इसे प्राप्त करने के लिए किसी भी पैरामीटर को पारित करने की आवश्यकता नहीं है।
एकल पैरामीटर वाले उपयोगकर्ता-परिभाषित फ़ंक्शन का एक उदाहरण वह हो सकता है जो ग्राहक की आईडी के आधार पर ग्राहक का संपर्क विवरण देता है। जब आप फ़ंक्शन को कॉल करते हैं, तो आप ग्राहक की आईडी को पैरामीटर के रूप में फ़ंक्शन में पास करते हैं। फ़ंक्शन तब ग्राहक के विवरण को देख सकता है और उन्हें रिटर्न वेरिएबल में वापस कर सकता है। यदि आप किसी अन्य ग्राहक की आईडी में पास करते हैं, तो फ़ंक्शन उस ग्राहक का विवरण लौटा देगा।
उपयोगकर्ता द्वारा परिभाषित कार्यों के लाभ
यूडीएफ के कुछ मुख्य लाभों में निम्नलिखित शामिल हैं।
- मॉड्यूलर प्रोग्रामिंग
- यूडीएफ आपको एक बार कोड लिखने की अनुमति देता है, फिर उसे जितनी बार जरूरत हो, उतनी बार कॉल करें। हर बार आपको एक ही काम करने के लिए उसी कोड को फिर से लिखने की आवश्यकता नहीं है। इसके बजाय बस फ़ंक्शन को कॉल करें। अगर कुछ बदलता है तो यह भी फायदेमंद है। आपको इसे केवल एक ही स्थान पर अपडेट करने की आवश्यकता है - फ़ंक्शन। यदि आपने फ़ंक्शन का उपयोग नहीं किया है, तो आपको इसे अपने पूरे एप्लिकेशन में कई स्थानों पर अपडेट करना होगा।
- प्रदर्शन
- यूडीएफ योजनाओं को कैशिंग करके और बार-बार निष्पादन के लिए पुन:उपयोग करके टी-एसक्यूएल कोड की संकलन लागत को कम करता है। यूडीएफ को प्रत्येक उपयोग के साथ पुन:पार्स और पुन:अनुकूलित करने की आवश्यकता नहीं है। इसका परिणाम बहुत तेज़ निष्पादन समय में होता है।
- नेटवर्क ट्रैफ़िक कम किया
- एक ऑपरेशन जो एक जटिल बाधा के आधार पर डेटा को फ़िल्टर करता है जिसे एकल स्केलर अभिव्यक्ति में व्यक्त नहीं किया जा सकता है उसे एक फ़ंक्शन के रूप में व्यक्त किया जा सकता है। फ़ंक्शन को तब
WHERE
. में लागू किया जा सकता है क्लाइंट को भेजी गई पंक्तियों की संख्या को कम करने के लिए क्लॉज।
यूडीएफ के अन्य, अधिक विशिष्ट लाभ भी हो सकते हैं, जैसे कि पिछले उदाहरण में जिसका उल्लेख मैंने किसी अन्य तालिका में गणना किए गए कॉलम तक पहुंचने वाले डेटा के साथ किया था।
उपयोगकर्ता द्वारा परिभाषित कार्यों के प्रकार
दो प्रकार के T-SQL उपयोगकर्ता-परिभाषित कार्य हैं:
- अदिश कार्य
- उपयोगकर्ता-परिभाषित स्केलर फ़ंक्शन एकल डेटा मान लौटाते हैं। आप फ़ंक्शन में मान के प्रकार को परिभाषित करते हैं। वापसी प्रकार पाठ . को छोड़कर कोई भी डेटा प्रकार हो सकता है , ntext , छवि , कर्सर , और टाइमस्टैम्प ।
- तालिका-मूल्यवान कार्य
- टेबल-वैल्यू फंक्शन (TVF) एक टेबल लौटाते हैं। इसलिए उनका वापसी प्रकार तालिका . है . टीवीएफ दो प्रकार के होते हैं:इनलाइन टीवीएफ और मल्टी-स्टेटमेंट टीवीएफ। इनलाइन टीवीएफ में फंक्शन बॉडी नहीं होती है। इसकी वापसी तालिका एकल
SELECT
. का परिणाम है बयान। दूसरी ओर एक मल्टी-स्टेटमेंट TVF में फंक्शन बॉडी होती है। मल्टी-स्टेटमेंट टीवीएफ के साथ, आप रिटर्न वेरिएबल में टेबल की संरचना निर्दिष्ट करते हैं।
आप सामान्य भाषा रनटाइम (CLR) उपयोगकर्ता-परिभाषित फ़ंक्शंस के रूप में स्केलर और टेबल-वैल्यू फ़ंक्शंस भी बना सकते हैं।
SQL सर्वर 2005 (9.x) से शुरू होकर, आप किसी भी Microsoft .NET Framework प्रोग्रामिंग भाषा में उपयोगकर्ता-परिभाषित फ़ंक्शन लिख सकते हैं, जैसे कि Microsoft Visual Basic .NET या Microsoft Visual C#।