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'
. का उपयोग करना चाहिए ।