मैं SQL सर्वर में एक ही उद्धरण से कैसे बचूं?




sql-server tsql (8)

मैं SQL Server 9 में किसी तालिका में कुछ टेक्स्ट डेटा insert प्रयास कर रहा हूं।

पाठ में एक एकल उद्धरण (') शामिल है।

मैं उससे कैसे बचूं?

मैंने दो सिंगल कोट्स का उपयोग करने की कोशिश की, लेकिन उसने मुझे कुछ त्रुटियां फेंक दीं।

जैसे। insert into my_table values('hi, my name''s tim.');


उद्धरण के दोगुनी होने पर काम करना चाहिए था, इसलिए यह असाधारण है कि यह आपके लिए काम नहीं करता था; हालांकि, एक विकल्प स्ट्रिंग के चारों ओर एकल के बजाय डबल कोट वर्णों का उपयोग कर रहा है। अर्थात,

insert into my_table values("hi, my name's tim." );


string value = "Abhishek's";

value = Replace(value,"'","''");

इस के आसपास काम करने के 2 तरीके:

' आप इसे स्ट्रिंग में बस दोगुना कर सकते हैं, उदाहरण के select 'I''m happpy' -- will get: I'm happy

किसी भी गुणक के लिए आप इस बारे में निश्चित नहीं हैं: एसक्यूएल सर्वर में आप select unicode(':') किसी भी चार का यूनिकोड प्राप्त कर सकते हैं

तो इस मामले में आप select 'I'+nchar(39)+'m happpy' भी select 'I'+nchar(39)+'m happpy' सकते हैं


यदि आपके एकल उद्धरण से दूसरे एकल उद्धरण से बचने के लिए आपके लिए काम नहीं कर रहा है (जैसे कि यह मेरे हालिया REPLACE() प्रश्नों में से एक के लिए नहीं था), तो आप अपनी क्वेरी से पहले SET QUOTED_IDENTIFIER OFF उपयोग कर सकते हैं, फिर अपनी क्वेरी के बाद SET QUOTED_IDENTIFIER ON कर सकते हैं।

उदाहरण के लिए

SET QUOTED_IDENTIFIER OFF;

UPDATE TABLE SET NAME = REPLACE(NAME, "'S", "S");

SET QUOTED_IDENTIFIER ON;
-- set OFF then ON again

इसके अलावा सावधान रहना एक और बात यह है कि यह वास्तव में क्लासिक ASCII '(ASCII 27) या यूनिकोड 201 9 (जो समान दिखता है, लेकिन समान नहीं) के रूप में संग्रहीत है या नहीं।

यह आवेषण पर एक बड़ा सौदा नहीं है, लेकिन इसका मतलब चुनिंदा और अद्यतनों पर दुनिया हो सकता है।
यदि यह यूनिकोड मान है तो 'WHERE क्लॉज में से बचें (उदाहरण के लिए जहां blah =' वर्कर्स 'कॉम्प') आपके द्वारा खोजे जा रहे मान की तरह वापस आ जाएगा, अगर 'वर्कर कॉम्प' में वास्तव में नहीं है तो वहां नहीं है यूनिकोड मूल्य।

यदि आपका क्लाइंट एप्लिकेशन फ्री-कुंजी का समर्थन करता है, साथ ही साथ आधारित इनपुट कॉपी और पेस्ट करता है, तो यह कुछ पंक्तियों में यूनिकोड हो सकता है, और अन्य में ASCII!

इसकी पुष्टि करने का एक आसान तरीका किसी प्रकार की खुली समाप्ति क्वेरी कर रहा है जो आपके द्वारा खोजे जा रहे मूल्य को वापस लाएगा, और उसके बाद उसे नोटपैड ++ या कुछ अन्य यूनिकोड सहायक संपादक में कॉपी और पेस्ट करेगा।

एसीआईआई मूल्य और यूनिकोड के बीच अलग दिखने वाली आंखों के लिए स्पष्ट होना चाहिए, लेकिन यदि आप गुदा की ओर झुकते हैं, तो यह एक हेक्स संपादक में 27 (एएससीआई) या 92 (यूनिकोड) के रूप में दिखाई देगा।


कैसा रहेगा:

insert into my_table values('hi, my name'+char(39)+'s tim.')

सिंगल कोट्स उन्हें दोगुना करके बच गए हैं , जैसा कि आपने हमें अपने उदाहरण में दिखाया है। निम्नलिखित एसक्यूएल इस कार्यक्षमता को दिखाता है। मैंने SQL सर्वर 2008 पर इसका परीक्षण किया:

DECLARE @my_table TABLE (
    [value] VARCHAR(200)
)

INSERT INTO @my_table VALUES ('hi, my name''s tim.')

SELECT * FROM @my_table

परिणाम

value
==================
hi, my name's tim.

मैं कोरी लार्सन से सहमत हूं। जब मैं SQL सर्वर 2005 का उपयोग कर रहा हूं, तो मैं एकल कोट से बचने के लिए एकल कोट का उपयोग करता हूं। यह अजीब लगता है, लेकिन यह मेरे लिए काम करता है। इसके साथ प्रयास करें।

संदर्भ: एसक्यूएल सर्वर 2005 उद्धरण उद्धरण







single-quotes