sql - Querying for tables & columns named as keywords -
एसक्यूएल सर्वर 2005 + मान।
भाग ए:
किसी भी उपयोगकर्ता तालिका के लिए सिस्टम / आंतरिक / मेटा / जो तालिकाओं / दृश्यों (माफ करना, नहीं एक डेटाबेस निनजा) से क्वेरी करने का वैधानिक तरीका क्या है या कॉलम नाम जो एसक्यूएल सर्वर कीवर्ड्स (जैसे मामला
) का उपयोग करते हैं?
मुझे खोजशब्दों की सूची को बनाए रखने में कोई दिक्कत नहीं है अगर यह क्वेरी-योग्य नहीं है, क्योंकि यह केवल एसक्यूएल सर्वर के संस्करणों के साथ बदलता है (सही?)।
SQL सर्वर 2005 में उपलब्ध दृश्यों को देखते हुए, मैं आसानी से INFORMATION_SCHEMA.COLUMNS
से इस जानकारी की क्वेरी कर सकता हूं और INFORMATION_SCHEMA.TABLES
, लेकिन मैं यह सुनिश्चित करना चाहता हूं कि यह भविष्य-प्रूफिंग के लिए सर्वोत्तम स्थान से है।
भाग बी:
< P> क्या क्वेरी के माध्यम से कीवर्ड की सूची प्राप्त करना संभव है?अद्यतन: एक उपयोगी अवधारणा है, जबकि मैं विशेष रूप से नहीं से बचने में दिलचस्पी रहा हूं कॉलम N / table / etc नामों पर सवाल है क्योंकि मैं एक उपकरण लिखने की उम्मीद कर रहा हूं जो कि तालिकाओं / कॉलम / आदि की जांच करेगा, जो कीवर्ड के साथ नाम साझा करेंगे और डेवलपर को उपयोगी चेतावनी देंगे। इस उपकरण का उपयोग मेरे कार्यालय में कोड समीक्षा के दौरान किया जाएगा, यह इंगित करने के लिए कि डेवलपर इकाई का नाम बदलने पर विचार करना चाह सकता है। (या उम्मीद है कि विकासकर्ता इससे पहले अपने स्वयं के अच्छे के लिए कोड की समीक्षा करें!) मैं इसे अपने निर्माण स्क्रिप्ट में निरंतर एकीकरण के साथ उपयोग करने के लिए सेट भी कर सकता हूं, लेकिन यह केवल भविष्य के लिए एक विचार है।
आपको उपयोग किए जाने वाले नामों को ठीक से उद्धृत करना चाहिए यदि आप कोड उत्पन्न करते हैं, तो बिल्ट-इन फ़ंक्शन का उपयोग करें। इसके बजाय ज्ञात कीवर्ड की एक सूची तैयार न करें, इसके बजाय प्रत्येक नाम के लिए हर नाम का नाम दें, जिसमें डेटाबेस का नाम, स्कीमा नाम और ऑब्जेक्ट नाम शामिल है। यह भी सुनिश्चित करें कि आप हमेशा शामिल वस्तुओं के सही मामले का पालन करें। एक सर्वोत्तम अभ्यास के रूप में, केस संवेदी कोलेशन सर्वर उदाहरण पर विकसित करें। मामला संवेदी सर्वर मिलान (डिफ़ॉल्ट) पर कोड का विकास करने पर मामला संवेदनशील कॉलेशन सर्वर पर तैनात होने पर उत्पादन पर शर्मनाक असफलता हो सकती है।
भाग ए के लिए
व्यक्तिगत रूप से मैं sys.column और sys.objects के लिए वास्तव में जाना होगा। इन्फॉर्मेशन_SCHEMA विचार भी अच्छे हैं, और वे सिद्धांत में 'पोर्टेबल' हैं, हालांकि मैं एसक्यूएल विशिष्ट लोगों के लिए इतना अधिक उपयोग करता हूं। मैं sys.objects बनाम sys.tables चुनें क्योंकि यह अधिक कवर करता है (जैसे दृश्य) मेरा सुझाव है कि आप तालिका मूल्यवान फ़ंक्शंस को भी कवर करते हैं, टेबल मूल्यवान पैरामीटर प्रकार (केवल 2008 में) और अस्थायी # टेबल्स और तालिका @ संचयित प्रक्रियाओं में घोषित भर्ती। यह केवल temp #tables और table @variables को छोड़कर क्लाइंट्स द्वारा भेजी गई बैचों में घोषित करेगा, लेकिन वे मूलतः क्लाइंट कोड में ही हैं।
Comments
Post a Comment