17

क्या यह कुशल क्वेरी बनाना संभव है जो पूर्ण नियमित अभिव्यक्ति सुविधा सेट का उपयोग करें।SQL सर्वर सर्वर में नियमित अभिव्यक्तियां?

यदि माइक्रोसॉफ्ट को वास्तव में उस सुविधा पर विचार नहीं करना चाहिए।

उत्तर

14

SQL सर्वर 2000 (और SQL सर्वर का कोई अन्य 32 बिट संस्करण) के लिए, xp_pcre है, जो विस्तारित संग्रहीत प्रक्रियाओं के सेट के रूप में पर्ल संगत नियमित अभिव्यक्ति प्रस्तुत करता है। मैंने इसका इस्तेमाल किया है, यह काम करता है।

हाल के संस्करण आपको .NET integrated regular expressions पर सीधे पहुंच प्रदान करते हैं (यह लिंक मृत लगता है, यहां एक और है: MSDN: How to: Work with CLR Database Objects)।

4

this और this देखें। वे इसे कैसे करें इस पर महान पोस्ट हैं।

5

उत्तर सामान्य स्थिति में नहीं है, हालांकि यह आपके द्वारा कुशलता से क्या मतलब हो सकता है पर निर्भर करता है। इन उद्देश्यों के लिए, मैं निम्नलिखित परिभाषा का उपयोग करूंगा: 'इंडेक्स का प्रभावी उपयोग करता है और एक समझदार क्रम में जुड़ता है' जो शायद किसी के जैसा अच्छा है।

इस मामले में, 'कुशल' प्रश्न 's-arg'-able' हैं, जिसका अर्थ है कि वे खोज पूर्वानुमान को कम करने के लिए इंडेक्स लुकअप का उपयोग कर सकते हैं। समानताएं (टी-जॉइन) और सरल असमानताएं यह कर सकती हैं। 'और' भविष्यवाणी यह ​​भी कर सकते हैं। इसके बाद, हम टेबल, इंडेक्स और रेंज स्कैनिंग में आते हैं - यानी ऑपरेशंस जिन्हें रिकॉर्ड-बाय-रिकॉर्ड (या इंडेक्स-कीबी इंडेक्स-की) तुलना करना होता है।

सोनटेक का उत्तर एक क्वेरी में इन-लाइनिंग रेगेक्सपी कार्यक्षमता की एक विधि का वर्णन करता है, लेकिन संचालन को रिकॉर्ड के आधार पर रिकॉर्ड पर तुलना करना पड़ता है। एक फ़ंक्शन में इसे लपेटने से फ़ंक्शन-आधारित इंडेक्स की अनुमति मिल जाएगी जहां गणना का परिणाम इंडेक्स में भौतिक हो जाता है (ओरेकल इसका समर्थन करता है और आप in this article पर चर्चा की गई चालों के प्रकार का उपयोग कर SQL सर्वर में समकक्ष कार्यक्षमता प्राप्त कर सकते हैं)। हालांकि, आप इसे मनमाने ढंग से regexp के लिए नहीं कर सका।

सामान्य मामले में, नियमित अभिव्यक्ति के अर्थशास्त्र स्वयं को इंडेक्स के तरीके से छंटनी मैच सेट में उधार नहीं देते हैं, इसलिए क्वेरी ऑप्टिमाइज़र में rexegp समर्थन को एकीकृत करना शायद संभव नहीं है।

0

मुझे लगता है कि हम एसक्यूएल सर्वर 2008 (hierarchyid, भू-स्थानिक) में नए प्रकार से देख सकते हैं कि अगर माइक्रोसॉफ्ट इस ऐड करना यह आप करने में सक्षम हैं एक SQL CLR विधानसभा

के रूप में आ जाएगा अपने डेटाबेस में असेंबली इंस्टॉल करें आप विजुअल स्टूडियो में एक नया डेटाबेस \ SQL सर्वर प्रोजेक्ट बनाकर अपना खुद का रोल कर सकते हैं - इससे आपको एक नया ट्रिगर/यूडीएफ/संग्रहीत प्रो/कुल या यूडीटी बनाने की अनुमति मिल जाएगी। आप कक्षा में System.Text.RegularExpressions आयात कर सकते हैं और वहां से जा सकते हैं।

आशा इस

1

मैं क्षमता मूल रूप से तदर्थ प्रश्नों के लिए एसक्यूएल सर्वर में नियमित अभिव्यक्ति फोन और संग्रहित प्रक्रियाओं में उपयोग करने के लिए प्यार होता है में मदद करता है। हमारी डीबीए हमें सीएलआर कार्यों को बनाने की अनुमति नहीं देगी, इसलिए मैं LINQ Pad का उपयोग कर रहा हूं, जो विज्ञापन सामग्री के लिए एक गरीब व्यक्ति के प्रश्न संपादक के रूप में है। जेएसओएन या एक्सएमएल जैसे संरचित डेटा के साथ काम करते समय यह विशेष रूप से उपयोगी होता है जिसे डेटाबेस में सहेजा गया है।

और मैं मानता हूं कि यह एक निरीक्षण की तरह लगता है कि कोई नियमित अभिव्यक्ति समर्थन नहीं है, यह एक क्वेरी भाषा के लिए एक स्पष्ट विशेषता की तरह लगता है। उम्मीद है कि हम इसे भविष्य के संस्करण में देखेंगे लेकिन लोग लंबे समय से इसके लिए पूछ रहे हैं और इसने अभी तक उत्पाद में इसका रास्ता नहीं बनाया है।

इसके खिलाफ मैंने देखा है कि सबसे खराब कारण यह है कि एक खराब गठित अभिव्यक्ति catastrophic backtracking का कारण बन सकती है जो .NET में निरस्त नहीं होगी और लगभग हमेशा मशीन को पुनरारंभ करने की आवश्यकता होती है। हो सकता है कि एक बार जब वे ढांचे में संबोधित करेंगे तो हम इसे SQL सर्वर के भविष्य के संस्करण में शामिल करेंगे।

+2

यह अटकलें और टिप्पणी है, जवाब नहीं। – amoss

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