2012-01-19 14 views
10

में एकल और डबल कोट्स दोनों को कैसे संभालें- मेरे पास यह नमूना टी-एसक्यूएल क्वेरी है और इसे SQL-Server-2008 पर आज़माएं।एसक्यूएल-अपडेट स्टेटमेंट

DECLARE nvarchar(1000) @wstring = "I asked my son's teacher, "How is my son doing now?"" 

UPDATE tablename SET columnname = ' " & @wstring & " ' where ... blah ... blah 

मुझे पता है कि उपरोक्त क्वेरी त्रुटि फेंक देगी।

तो मैं SQL-अद्यतन कथन में एकल और डबल कोट्स दोनों को कैसे प्रबंधित करूं?

कृपया प्रत्येक उद्धरण से पहले 'स्लैश \' या सिंगल-कोट जोड़ने के बारे में सुझाव न दें और समान रूप से द्वि-उद्धरण के लिए।

यह अव्यवहारिक होगा क्योंकि उपर्युक्त उदाहरण केवल एक सरल है और वास्तविक अनुप्रयोग मान 1000 से अधिक वर्ण हैं, जो किसी अन्य सिस्टम-स्रोत से प्राप्त किए जाएंगे।

+0

क्या स्थिति है कि आपके पास एक विशेष टेक्स्ट फ़ाइल है जिसे आप SQL क्लाइंट में मैन्युअल रूप से सम्मिलित करना चाहते हैं?या आप फ़ाइल डालने के लिए एक प्रोग्राम लिख रहे हैं, और आप प्रोग्राम को लिखने के तरीके के बारे में जानने के लिए क्लाइंट में बस परीक्षण कर रहे हैं? –

+0

क्या आप सी # का उपयोग कर रहे हैं? स्थिति को समझने की कोशिश के लिए – Pankaj

+0

Thx Russell ...। परिदृश्य इस तरह है - ऐसे कई सिस्टम हैं जो हमें यह 1000+ वर्ण स्ट्रिंग भेजते हैं। अब यह स्ट्रिंग एक एसक्यूएल-पैरामीटर के रूप में पारित की गई है और मेरी एसक्यूएल अपडेट-क्वेरी को किसी विशेष कॉलम में स्ट्रिंग डालने की आवश्यकता है। – MukeshAnAlsoRan

उत्तर

15

आपको बैकस्लेश के साथ उद्धरण बच सकते हैं:

"I asked my son's teacher, \"How is my son doing now?\"" 
+1

मैंने पहले से ही कहा है कि प्रत्येक उद्धरण से पहले मैन्युअल रूप से 'स्लैश \' या सिंगल-कोट जोड़ना और समान रूप से डबल-कोट के लिए प्रतिकूल है और इनकार किया गया है, क्योंकि उपर्युक्त उदाहरण केवल एक नमूना है और वास्तविक एप्लिकेशन मान अधिक से अधिक है 1000 अक्षर – MukeshAnAlsoRan

4

उपयोग दो एकल उद्धरण उन्हें एसक्यूएल बयान में से बचने के लिए। डबल कोट्स एक समस्या नहीं होनी चाहिए:

SELECT 'How is my son''s school helping him learn? "Not as good as Stack Overflow would!"' 

प्रिंट:

How is my son's school helping him learn? "Not as good as Stack Overflow would!"

+0

धन्यवाद माइक। लेकिन मैंने पहले ही कहा है कि प्रत्येक उद्धरण से पहले मैन्युअल रूप से 'स्लैश \' या सिंगल-कोट जोड़ना और डबल-कोट के लिए समान रूप से अव्यवहारिक और अस्वीकार कर दिया गया है, क्योंकि उपरोक्त उदाहरण केवल एक नमूना है और वास्तविक एप्लिकेशन मान अधिक से अधिक है 1000 अक्षर – MukeshAnAlsoRan

+2

यदि पात्रों से बचना अव्यवहारिक है, तो मुझे लगता है कि उन्हें बचाना बहुत कठिन होगा। वैकल्पिक रूप से, आप ", और बैच-प्रतिस्थापित करने के लिए एक विकल्प मान निर्धारित करने का प्रयास कर सकते हैं ताकि आप अपनी क्वेरी निष्पादित कर सकें। बेशक, आपको उन्हें प्रदर्शित होने के लिए आवश्यक मूल्यों को फिर से बदलना होगा। – mclark1129

+0

हां माइक .. मैंने उस सीमा तक कुछ सोचा था ... एक बैच-प्रतिस्थापन और समान रूप से। लेकिन मुझे लगता है कि इस परिदृश्य के लिए एक ओवरकिल होगा और एसक्यूएल के पास इसे संभालने का कुछ अंतर्निहित सुरुचिपूर्ण तरीका होना चाहिए, क्योंकि यह समस्या होगी पहले भी 10 साल पहले मौजूद रहे हैं। – MukeshAnAlsoRan

0

सी # और वीबी SqlCommand वस्तु में लागू करता Parameter.AddWithValue तरीका है जिसके इस स्थिति

4

संभालती निर्भर करता है आप किस भाषा में प्रोग्रामिंग कर रहे हैं, आप दो डबल कोट्स के साथ डबल कोट्स को प्रतिस्थापित करने के लिए फ़ंक्शन का उपयोग कर सकते हैं।

PHP में उदाहरण है कि हो सकता है के लिए:

str_replace('"', '""', $string); 

आपको लगता है कि एसक्यूएल का उपयोग कर केवल, शायद REPLACE() आप के लिए क्या देख रहे है क्या करने के लिए कोशिश कर रहे हैं।

तो आपकी क्वेरी कुछ इस तरह दिखेगा: विशेष वर्ण को दूर करने के

"UPDATE Table SET columnname = '" & REPLACE(@wstring, '"', '""') & "' where ... blah ... blah " 
1

उपयोग "बदलें"।

REPLACE(ColumnName ,' " ','') 

पूर्व: -

--Query ---

DECLARE @STRING AS VARCHAR(100) 
SET @STRING ='VI''RA""NJA "' 

SELECT @STRING 
SELECT REPLACE(REPLACE(@STRING,'''',''),'"','') AS MY_NAME 

--Result ---

VI'RA "" Nja "

0

जब सेट QUOTED_IDENTIFIER बंद है, अभिव्यक्तियों में शाब्दिक तार एकल या दोहरे उद्धरण चिह्नों द्वारा सीमित किया जा सकता है।

यदि एक शाब्दिक स्ट्रिंग को डबल उद्धरण चिह्नों द्वारा सीमित किया जाता है, तो स्ट्रिंग में एम्प्रॉइड एकल उद्धरण चिह्न हो सकते हैं, जैसे एस्ट्रोफ़ेस।

संबंधित मुद्दे