कॉलम नामों से बचने के लिए SQL मानक?


98

क्या कॉलम नाम से बचने के लिए SQL मानक है? यदि नहीं, तो MySQL और SQLite के लिए क्या काम करता है? यह SQL सर्वर के लिए भी काम करता है?

जवाबों:


89

उद्धरण चिन्ह "

एसक्यूएल: 1999 मानक निर्दिष्ट करता है कि दोहरे उद्धरण ( ") ( उद्धरण चिह्न ) परिसीमित पहचानकर्ता किया जाता है।

<delimited identifier> ::= <double quote> <delimited identifier body> <double quote>

Oracle, PostgreSQL, MySQL, MSSQL और SQlite सभी "पहचानकर्ता परिसीमनक के रूप में समर्थन करते हैं ।

वे सभी "'डिफ़ॉल्ट' के रूप में उपयोग नहीं करते हैं । उदाहरण के लिए, आपको ANSI मोड में MySQL चलाना होगा और SQL सर्वर केवल तब ही इसका समर्थन करता QUOTED_IDENTIFIERहै ON


77

SQLite के अनुसार ,

  • 'foo' एक SQL स्ट्रिंग है
  • "foo" SQL पहचानकर्ता (स्तंभ / तालिका / आदि) है
  • [foo] MS SQL में एक पहचानकर्ता है
  • `foo` MySQL में एक पहचानकर्ता है

योग्य नामों के लिए, वाक्यविन्यास है: "t"."foo"या [t].[foo], आदि।

ANSI_QUOTESविकल्प सक्षम होने पर MySQL मानक "फू" का समर्थन करता है।


3
ध्यान दें कि 'foo'यदि संदर्भ एक स्ट्रिंग की अनुमति नहीं देगा, तो SQLite एक पहचानकर्ता के रूप में व्याख्या करने की अनुमति देता है, और "foo"यदि संदर्भ पहचानकर्ता को अनुमति नहीं देता है, तो स्ट्रिंग के रूप में व्याख्या की जा सकती है, हालांकि यह नोट है कि यह व्यवहार भविष्य में हटाया जा सकता है संस्करणों।
थोमसट्रेटर

तो, आप "टी" कैसे करते हैं। *
लूनीक्स

2
@thomasrutter हाँ मुझे इस व्यवहार से पूरी तरह से काट लिया गया ... उपयोग करने की कोशिश की WHERE "nonexistent_column" = 0और sqlite ने खुशी से इसे दिखावा करते हुए निष्पादित किया कि मेरी "nonexistent_column"एक स्ट्रिंग थी। पूरी तरह से नाम को क्वालिफाई करने के रूप "my_table"."nonexistent_column"में और अधिक सख्ती से व्यवहार करने में sqlite को मजबूर करता है ।
रफालविंड

foo, "foo"और 'foo'MySQL के साथ मेरे लिए काम नहीं किया। इसमें बैकटिक्स की आवश्यकता थी। और मामले को बदतर बनाने के लिए, MySQL बेकार त्रुटि संदेश प्रदान कर रहा था ।
jww


20

MS SQL उपयोग के लिए [और]

SELECT [COLUMN], [COLUMN 2] FROM [TABLE]

2
आपके पास ms sql के साथ कॉलम नामों में स्थान हो सकता है?!?

3
आप ऐसा कर सकते हैं! मैं हालांकि नहीं होगा।
JMP

1
हां, आपके पास MSSQL में इकाई नाम के रूप में स्थान या आरक्षित शब्द हो सकते हैं। आपको बस उन्हें [] करने की आवश्यकता है।
बोल्टबैट

6
BTW, यदि आप MS SQL सर्वर में [और] का उपयोग कर रहे हैं और आप स्वयं नाम में] चरित्र का उपयोग करना चाहते हैं (जो भी कारण हो) तो आपको इसके बजाय एक अन्य] चरित्र (यानी उपयोग]] से बचने की आवश्यकता है )।
डैनियल जेम्स ब्रायर्स


1

कुछ उत्तरों को एक साथ रखना:

MS SQL (aka T-SQL), Microsoft Access SQL, DBASE / DBF: SELECT [COLUMN], [COLUMN2] FROM [TABLE]

माई एसक्यूएल: SELECT `COLUMN`, `COLUMN2` FROM `TABLE`

SQLite, Oracle, Postgresql: SELECT "COLUMN", "COLUMN2" FROM "TABLE"

कृपया जोड़ें / संपादित करें!

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