2008-09-09 13 views
117

मैंने देखा है कि विजुअल स्टूडियो 2008 एसक्यूएल में कॉलम नामों के चारों ओर स्क्वायर ब्रैकेट रख रहा है। ब्रैकेट किसी भी लाभ की पेशकश करते हैं? जब मैं टी-एसक्यूएल कोड करता हूं तो मैंने कभी उनके साथ परेशान नहीं किया है।एसक्यूएल कथन में वर्ग ब्रैकेट [] का उपयोग क्या है?

उदाहरण: दृश्य स्टूडियो: चुनें [स्तम्भ 1], [कॉलम 2] आदि ...

मेरा अपना तरीका: चयन स्तम्भ 1, कॉलम 2 आदि ...

+0

यह अच्छी बात है कि आपके हाथ को कोडित एसक्यूएल को कभी भी ब्रैकेट की आवश्यकता नहीं है, आपके डेटाबेस नामकरण सम्मेलन को उन नामों को बहिष्कृत करना चाहिए जिन्हें ब्रैकेट की आवश्यकता है। –

+0

संबंधित उत्तर QUOTED_IDENTIFIER सेटिंग पर चर्चा करता है: http://stackoverflow.com/questions/19657101/what-is-the-difference-between-square-brackets-and-single-quotes-for-aliasing-in –

+0

मैं इसे जोड़ सकता हूं ब्रैकेट्स एक माइक्रोसॉफ्ट क्विर्क हैं। एसक्यूएल मानक वास्तव में डबल कोट्स ('" ') का उपयोग करता है, जो माइक्रोसॉफ्ट _also_ का समर्थन करता है। अगर, माइक्रोसॉफ्ट को सब कुछ सीमित करने की आवश्यकता महसूस हुई, तो इसके बजाय मानक डबल-कोट्स का उपयोग करने के लिए बेहतर फॉर्म होता। लेकिन मुझे लगता है कि ऐसा होता यह किसी अन्य डीबीएमएस को पोर्ट करना बहुत आसान है, और यह कभी नहीं करेगा ... – Manngo

उत्तर

127

यदि आप स्तंभ नाम या पहचानकर्ताओं में कीवर्ड या विशेष वर्णों का उपयोग करते हैं तो ब्रैकेट की आवश्यकता होती है। आप एक कॉलम [First Name] (एक स्पेस के साथ) नाम दे सकते हैं - लेकिन फिर जब भी आप उस कॉलम को संदर्भित करते हैं तो आपको ब्रैकेट का उपयोग करने की आवश्यकता होगी।

नए उपकरण उन्हें हर जगह या स्थिरता के मामले में जोड़ते हैं।

+3

क्या यह स्क्वायर ब्रैकेट का एकमात्र उद्देश्य है? –

+0

@mehow, यह [लगता है] (http://msdn.microsoft.com/en-us/library /aa224033(v=sql.80).aspx) इस तरह, लेकिन मेरे पास ऐसा स्पष्ट संदर्भ नहीं है। –

+1

संबंधित q: http://stackoverflow.com/questions/9917196/meaning-of-square-brackets -इन-एमएस-एसक्यूएल-टेबल-डिजाइनर –

5

कोष्ठक जब इस्तेमाल किया जा सकता कॉलम नाम आरक्षित शब्द हैं।

यदि आप प्रोग्रामिंग रूप से कॉलम नामों के संग्रह से SQL कथन उत्पन्न कर रहे हैं, तो आप नियंत्रण नहीं करते हैं, तो आप हमेशा ब्रैकेट का उपयोग करके समस्याओं से बच सकते हैं।

6

कॉलम नामों में वर्ण निष्पादन इंजन को भ्रमित करने वाले वर्ण और आरक्षित शब्द हो सकते हैं, इसलिए हर समय उनके चारों ओर ब्रैकेट रखकर इसे होने से रोकता है। किसी समस्या की जांच करने और उसके साथ निपटने से आसान, मुझे लगता है।

3

मेरा मानना ​​है कि यह उन्हें स्थिरता के लिए वहां जोड़ता है ... केवल तभी आवश्यक होता है जब आपके पास कॉलम नाम में कोई स्थान या विशेष चरित्र हो, लेकिन आईडीई उत्पन्न करने पर यह केवल उन्हें शामिल करने के लिए क्लीनर है।

41

यदि आपके कॉलम में SQL कीवर्ड के समान नाम हैं, या उनमें रिक्त स्थान हैं तो वे आसान हैं।

उदाहरण:

create table test (id int, user varchar(20)) 

अरे नहीं! कीवर्ड 'उपयोगकर्ता' के पास गलत वाक्यविन्यास। लेकिन यह:

create table test (id int, [user] varchar(20)) 

ठीक काम करता है।

10

उदाहरण के लिए कुछ वर्णों के साथ कॉलम नामों का उपयोग करके वे (कुछ कारणों से) उपयोगी हैं।

Select First Name From People 

काम नहीं होगा, लेकिन स्तंभ नाम के चारों ओर वर्ग कोष्ठक डाल

Select [First Name] From People 

संक्षेप में काम करेगा, यह स्पष्ट रूप से एक वस्तु का नाम घोषित करने का एक तरीका है, कॉलम, टेबल, डेटाबेस, उपयोगकर्ता या सर्वर।

4

इसके अतिरिक्त कुछ शेयरपॉइंट डेटाबेस में उनके नामों में हाइफ़न होते हैं। एसक्यूएल स्टेटमेंट्स में स्क्वायर ब्रैकेट का उपयोग करने से नामों को सही ढंग से पार्स किया जा सकता है।

3

आरक्षित शब्दों का उपयोग करने से बचने वाले नामकरण सम्मेलन का पालन करने के बावजूद, माइक्रोसॉफ्ट नए आरक्षित शब्दों को जोड़ता है। ब्रैकेट का उपयोग करने से आपके कोड को किसी नए SQL सर्वर संस्करण में अपग्रेड करने की अनुमति मिलती है, बिना पहले आपके क्लाइंट कोड से माइक्रोसॉफ्ट के नए आरक्षित शब्दों को संपादित करने की आवश्यकता होती है। यह संपादन एक महत्वपूर्ण चिंता हो सकती है।इससे आपकी परियोजना समय से पहले सेवानिवृत्त हो सकती है ....

ब्रैकेट भी उपयोगी हो सकते हैं जब आप सभी को एक स्क्रिप्ट में बदलना चाहते हैं। यदि आपके बैच में @String नामक एक चर शामिल है और [स्ट्रिंग] नामक एक कॉलम है, तो आप @String से @NewString का नाम बदलने के बिना कॉलम का नाम बदलकर [न्यूस्ट्रिंग] कर सकते हैं।

1

1 99 0 के दशक में एसक्यूएल की अंधेरे उम्र के दौरान यह एक अच्छा अभ्यास था क्योंकि एसक्यूएल डिजाइनर शब्दकोष में प्रत्येक शब्द को नई सुविधाओं के अंतहीन हिमस्खलन के लिए कीवर्ड के रूप में जोड़ने की कोशिश कर रहे थे और उन्होंने इसे SQL3 ड्राफ्ट कहा।

तो यह आगे संगतता रखता है।

और मैंने पाया कि इसका एक और अच्छा दुष्प्रभाव है, यह कोड समीक्षाओं और रीफैक्टरिंग में grep का उपयोग करते समय बहुत मदद करता है।

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