वर्ग बयानों में [] वर्ग कोष्ठक का उपयोग क्या है?


163

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

उदाहरण:

दृश्य स्टूडियो:

SELECT [column1], [column2] etc...

मेरा अपना रास्ता:

SELECT column1, column2 etc...

यह एक अच्छी बात है कि आपके हाथ से कोडित SQL को कभी भी ब्रैकेट्स की आवश्यकता नहीं होती है, आपके डेटाबेस के नामकरण कन्वेंशन को ऐसे नामों को बाहर करना चाहिए जिन्हें कोष्ठक की आवश्यकता है।
क्रिश्चियन औडर्ड

संबंधित जवाब QUOTED_IDENTIFIER सेटिंग पर चर्चा करता है: stackoverflow.com/questions/19657101/…
जारेड बेक

8
मैं जोड़ सकता हूं कि कोष्ठक एक Microsoft quirk हैं। SQL मानक वास्तव में दोहरे उद्धरण चिह्नों ( ") का उपयोग करता है , जो Microsoft भी समर्थन करता है। यदि, Microsoft को हर चीज़ का परिसीमन करने की आवश्यकता महसूस होती है, तो इसके बजाय मानक डबल-कोट्स का उपयोग करना बेहतर होता। लेकिन मुझे लगता है कि इससे एक और DBMS को पोर्ट करना बहुत आसान हो जाएगा, और यह कभी नहीं होगा ...
Manngo

जवाबों:


181

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

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


3
क्या यह वर्ग कोष्ठक का एकमात्र उद्देश्य है?

1
@mehow, यह ऐसा लगता है, लेकिन मेरे पास ऐसा कोई संदर्भ नहीं है जो स्पष्ट रूप से इंगित करता हो।
माइकल हरेन


2
नियमित अभिव्यक्तियों का उपयोग करके परिणामों को सीमित करने के लिए sql एक चुनिंदा प्रश्न के समान ऑपरेटर में वर्ग कोष्ठक का भी उपयोग करता है। codeproject.com/Articles/33941/SQL-LIKE-Operator
जेन्स फ़्रैन्सेन

2
आप एक स्तंभ नाम भी परिभाषित कर सकते हैं, selectलेकिन select select from mytableएक त्रुटि को फेंक select [select] from mytableदेगा ताकि यह एक मान्य क्वेरी बन जाए। आपके एसक्यूएल प्रबंधन स्टूडियो में जो भी शब्द रंगीन हो जाता है, उसे ब्रैकेट से घिरा होना चाहिए, यदि आप उन्हें कॉलम / टेबल / एसपी / आदि नामों के रूप में उपयोग करना चाहते हैं। MySQL में एकल उद्धरण `` `इसके बराबर होंगे।
बैरी ग्वेनकाया

59

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

उदाहरण:

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

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

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

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


@Blordbeard यह Microsoft SQL Server के लिए कुछ विशिष्ट है या क्या स्क्वायर ब्रैकेट Oracle, mySQL, PostgreSQL आदि के लिए भी काम करते हैं?
user3700562

4
ब्रैकेट मानक एसक्यूएल नहीं हैं, यह सुनिश्चित नहीं है कि सभी डीबी इंजन किस वर्ण का उपयोग करते हैं। उदाहरण के लिए: MySQL backticks का उपयोग करता है: stackoverflow.com/questions/2889871/…
Blorgbeard

12

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

Select First Name From People

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

Select [First Name] From People

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


6

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


5

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

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


5

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

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


5

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

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

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


4

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


3

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.