SQL सर्वर के लिए सीएलआर उपयोगकर्ता-परिभाषित फ़ंक्शन बनाने का कोई तरीका है जो तालिका मूल्यवान फ़ंक्शन सिंटैक्स का उपयोग किए बिना एकाधिक मान देता है? उदाहरण के लिए, कहें कि मैं एक समन्वय रूपांतरण करना चाहता हूं जैसे:आउट पैरामीटर के साथ एसक्यूएल सर्वर सीएलआर यूडीएफ - क्या यह संभव है?
[SqlFunction()]
public void ConvertCoordinates(SqlDouble x, SqlDouble y, SqlDouble z, out SqlDouble r, out SqlDouble t, out SqlDouble p)
{
r = new SqlDouble(Math.Sqrt((x.Value*x.Value)+(y.Value*y.Value)+(z.Value*z.Value)));
t = new SqlDouble(Math.Acos(r.Value/z.Value));
p = new SqlDouble(Math.Atan(y.Value/x.Value));
}
क्या यह भी संभव है? इस मामले में एक तालिका-मूल्यवान फ़ंक्शन अनुचित लगता है क्योंकि गणना कभी भी एक से अधिक आउटपुट पंक्ति उत्पन्न नहीं करेगी। स्केलर मूल्यवान फ़ंक्शन सिंटैक्स का उपयोग करके, मुझे गणना करने के लिए तीन अलग-अलग फ़ंक्शन लिखना होगा और प्रत्येक को अलग से कॉल करना होगा। मेरे वास्तविक उपयोग मामले को देखते हुए, यह बेहद अव्यवहारिक है।
मुझे एहसास है कि उपर्युक्त तर्क शुद्ध टी-एसक्यूएल का उपयोग करके पूरा किया जा सकता है; मेरा वास्तविक उपयोग केस अधिक जटिल है लेकिन फिर भी केवल एक पंक्ति में परिणाम होगा जिसमें कई परस्पर निर्भर आउटपुट मान होंगे।
तो, नीचे की रेखा, क्या यह व्यवहार्य है? मुझे नहीं लगता कि यह है, लेकिन कोई उम्मीद कर सकता है। यदि मौके से यह व्यवहार्य है, तो टी-एसक्यूएल कैसा दिखता है जो इस तरह के एक समारोह को कॉल करता है?
यूडीएफ (चाहे स्केलर, या टैबुलर, टी-एसक्यूएल या सीएलआर) पैरामीटर नहीं हो सकते हैं। यदि वे कर सकते हैं, तो आप इन आउटपुट का उपभोग करना चाहते हैं, तो आपको 'SELECT' खंड में कॉल करने की अनुमति देने के लिए नया वाक्यविन्यास आविष्कार करना होगा। और मुझे नहीं लगता कि एक पंक्ति-मूल्यवान फ़ंक्शन एक पंक्ति को लौटने के लिए क्यों अजीब लग रहा है। –
@ डेमियन यह सिर्फ एक प्रश्न था कि यह संभव है या नहीं।मेरे स्वयं के पढ़ने और प्रयोग ने संकेत दिया था कि शायद यह नहीं था (जैसा कि मैंने भी कहा था), लेकिन चूंकि मैं सीएलआर एकीकरण के लिए नया हूं, मैं पूछना चाहता था। जब 1 से अधिक पंक्ति एक संभावना है तो टीवीएफ "मेरे लिए अजीब" प्रतीत नहीं होता है। उदाहरण हमेशा एक पंक्ति देता है, फिर भी अंतःसंबंधित वापसी मान केवल सेट के रूप में सार्थक होते हैं। मेरे वास्तविक उपयोग मामले में मैं लाखों पंक्तियों के लिए एक समान, लेकिन बड़ी गणना कर रहा हूं, इसलिए आउटपुट पैरामीटर एक संभावना होने पर एक टीवीएफ बस अक्षम होता है। एक सरल 'नहीं' पर्याप्त होता। – bporter
@ बोर्टर - जाहिर है कि एक टीवीएफ सबसे अच्छा विकल्प होगा - आप इसे स्वयं कहते हैं, वे "अजीब लगते हैं जब 1 से अधिक पंक्ति एक संभावना है" और फिर कहें कि आपके पास लाखों पंक्तियां हैं। एर्गो ए (एस) टीवीएफ जवाब है! यह एक अनिवार्य foreach स्टेटमेंट की तरह हर पंक्ति पर फिर से शुरू करने से अधिक कुशल होने जा रहा है। – gbjbaanb