Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

QUOTED_IDENTIFIER को समझना

QUOTED_IDENTIFIER की समझ की तलाश है मैं यहाँ कुछ समझ पोस्ट करूँगा।

लघु संस्करण

एएनएसआई ने मांग की कि उद्धरण चिह्नों का उपयोग पहचानकर्ताओं के आसपास किया जाए (तारों के आसपास नहीं)। SQL सर्वर ने दोनों का समर्थन किया:

एसक्यूएल सर्वर मूल रूप से:

  • SELECT "Hello, world!" --उद्धरण चिह्न
  • SELECT 'Hello, world!' --एपॉस्ट्रॉफ़ी
  • CREATE TABLE [The world's most awful table name] ([Hello, world!] int)
  • SELECT [Hello, world!] FROM [The world's most awful table name] से

एएनएसआई (यानी SET QUOTED_IDENTIFIER ON ):

  • SELECT "Hello, world!" --उद्धरण चिह्न अब स्ट्रिंग के आस-पास एएनएसआई में मान्य नहीं है
  • SELECT 'Hello, world!' --एपॉस्ट्रॉफ़ी
  • CREATE TABLE "The world's most awful table name" ("Hello, world!" int)
  • SELECT "Hello, world!" FROM "The world's most awful table name"

लंबा संस्करण

मूल रूप से, SQL सर्वर ने आपको उद्धरण चिह्न का उपयोग करने की अनुमति दी थी ("..." ) और धर्मोपदेश ('...' ) स्ट्रिंग्स के चारों ओर एक दूसरे के स्थान पर (जैसे Javascript करता है):

  • SELECT "Hello, world!" --उद्धरण चिह्न
  • SELECT 'Hello, world!' --एपॉस्ट्रॉफ़ी

और यदि आप किसी ऐसी नाम तालिका, दृश्य, प्रक्रिया, स्तंभ आदि चाहते हैं, जो वस्तुओं के नामकरण के सभी नियमों का उल्लंघन करती हो, तो आप इसे वर्ग कोष्ठक में लपेट सकते हैं ([ , ] ):

CREATE TABLE [The world's most awful table name] ([Hello, world!] int)
SELECT [Hello, world!] FROM [The world's most awful table name]

और यह सब काम किया, और समझ में आया।

फिर एएनएसआई आया

तब एएनएसआई साथ आया और उसके पास अन्य विचार थे:

  • यदि आपका कोई फंकी नाम है, तो उसे उद्धरण चिह्नों में लपेटें ("..." )
  • धर्मोपदेश का उपयोग करें ('...' ) स्ट्रिंग्स के लिए
  • और हम आपके वर्गाकार कोष्ठकों की भी परवाह नहीं करते हैं

जिसका अर्थ है कि यदि आप "उद्धरण" . करना चाहते हैं एक फंकी कॉलम या टेबल नाम जिसे आपको उद्धरण चिह्नों का उपयोग करना चाहिए:

SELECT "Hello, world!" FROM "The world's most awful table name"

यदि आप SQL सर्वर जानते थे, तो आप जानते थे कि उद्धरण चिह्न पहले से ही तार का प्रतिनिधित्व करने के लिए इस्तेमाल किया जा रहा था। यदि आपने आँख बंद करके उस ANSI-SQL को निष्पादित करने का प्रयास किया है मानो यह T-SQL हो :यह बकवास है, और SQL सर्वर ने आपको ऐसा बताया:

Msg 102, Level 15, State 1, Line 8
Incorrect syntax near 'The world's most awful table name'.

यह अमल करने की कोशिश करने का नैतिक समकक्ष है:

SELECT 'Hello, world!' FROM 'The world''s most awful table name'

जो क्रियान्वित करने जैसा है:

SELECT 'string' FROM 'string'

आपको नए ANSI व्यवहार में ऑप्ट-इन करना होगा

इसलिए Microsoft ने आपको SQL के ANSI फ्लेवर में ऑप्ट-इन करने देने के लिए एक सुविधा जोड़ी है।

मूल (या QUOTED_IDENTIFIER बंद) :

SELECT "Hello, world!" --valid
SELECT 'Hello, world!' --valid

QUOTED_IDENTIFIER को चालू करें :

SELECT "Hello, world!" --INVALID
SELECT 'Hello, world!' --valid

SQL सर्वर अब भी आपको [square brackets] . का उपयोग करने देता है , आपको "quotation marks" . का उपयोग करने के लिए बाध्य करने के बजाय . लेकिन QUOTED_IDENTIFIER ON के साथ, आप नहीं "double quote quotation mark around strings" . का उपयोग करें , आपको केवल 'the single quote apostrophe' . का उपयोग करना चाहिए ।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में डायनामिक पिवट कॉलम

  2. मैं SQL सर्वर में किसी XML मान से तत्व नामों की सूची कैसे प्राप्त कर सकता हूं?

  3. SQL सर्वर में "शून्य त्रुटि से विभाजित करें" को ठीक करने के 5 तरीके (संदेश 8134)

  4. एक्सेल डेटा से इंसर्ट स्टेटमेंट कैसे जेनरेट करें और SQL सर्वर टेबल में लोड करें - SQL सर्वर / TSQL ट्यूटोरियल पार्ट 103

  5. SQL सर्वर (T-SQL) में उन्नत सर्वर कॉन्फ़िगरेशन विकल्प दिखाएँ