2009-06-30 10 views
5

मैं ऐसा करके एसक्यूएल 2008 में एक क्वेरी चलाने के लिए कोशिश कर रहा हूँ:एसक्यूएल एस्केप ''

@query varchar(max) 

SET @query = 'SELECT * FROM Table WHERE [Name] = ' 'Karl' ' ' 

EXEC(@query) 

समस्या यह है कि किसी कारण से 'Karl' आसपास अक्षर लोप भाग निकले नहीं मिलता, यानी क्वेरी ...WHERE [Name] = Karl के रूप में निष्पादित होता है और विफल रहता है।

किसी के पास कोई सुझाव है?

धन्यवाद

कार्ल

+0

यह SQL सर्वर 2008 है, है ना? MySQL या PostgreSQL या SQLite या SQL के अन्य संस्करणों में से कोई नहीं है? – MiffTheFox

+3

यदि आप स्ट्रिंग @query प्रिंट करते हैं तो आप क्या देखते हैं? – Tetraneutron

उत्तर

0

इस सेट @query पसंद करते हैं = 'का चयन करें * टेबल कहां [नाम] = से' '' 'कार्ल' '' ''

+0

यह तब तक काम नहीं करेगा जब तक कि कर्ल को 'कर्ल' जैसे नाम से पहले और बाद में एक ही उद्धरण के साथ डेटाबेस में संग्रहीत नहीं किया जाता है क्योंकि यह वास्तविक क्वेरी में होता है: चयन करें * तालिका से जहां [नाम] = '' कार्ल ' –

+0

thne अंत में एक और उद्धरण जोड़ें इस SET @query = 'चयन करें * तालिका से जहां [नाम] =' '' '' कर्ल '' '' '' इस – KuldipMCA

-1

सीधे शब्दों में अक्षर लोप बचने भागने बार \ का उपयोग कर इस तरह से 'का चयन करें * टेबल कहां [नाम] = से' \ 'कार्ल \' ''

आशा है कि यह मदद करता है

+3

की तरह है जो एसक्यूएल सर्वर के टी-एसक्यूएल में काम नहीं करेगा –

2

इस पर काम करता है मेरी एसक्यूएल सर्वर प्रबंधन स्टूडियो से मशीन:

@query varchar(max) 

SET @query = 'SELECT * FROM Table WHERE [Name] = ''''''Karl''''''' 

EXEC(@query) 
+3

यह तब तक काम नहीं करेगा जब तक कि कर्ल को "सिंगल" जैसे नाम से पहले और बाद में दो सिंगल कोट्स के साथ डेटाबेस में संग्रहीत नहीं किया जाता है क्योंकि इसका वास्तविक प्रश्न होता है: चयन करें * तालिका से जहां [नाम] = '' 'कार्ल '' –

3

ऐसे कई तरीके है कि आप एसक्यूएल सर्वर में चरित्र डेटा बच सकते हैं कर रहे हैं, कुछ लोगों को भी QUOTENAME() कार्यों के प्रयोग की वकालत।

यदि आप वास्तव में इस विषय क्षेत्र की ठोस समझ विकसित करना चाहते हैं तो क्या मैं अनुशंसा कर सकता हूं कि एसक्यूएल सर्वर डेवलपर्स क्या अनुभव कर रहे हैं, जो विभिन्न विधियों के संबंध में आवश्यक पढ़ने के लिए आवश्यक हैं, जो आप डायनामिक टी को शामिल करने के लिए उपयोग कर सकते हैं आपके कोडिंग में -एसक्यूएल।

The Curse and Blessings of Dynamic SQL

+0

वही जगह मैं लोगों को ओर इंगित करता हूं। – dverespey

1

प्रयास करें:

DECLARE @query varchar(max) 

SET @query = 'SELECT * FROM Table WHERE [Name] = ''Karl''' 

PRINT 'when in doubt, print the query out: '+ISNULL(@query,'') 
EXEC(@query) 

एक भी बोली करवाने के लिए दिखाई देते हैं, तो आप दो आसन्न एकल उद्धरण की आवश्यकता है। आप किसी एक उद्धरण के साथ एक एकल उद्धरण से बचने, उदाहरण के लिए:

PRINT ''''  --will print a one single quote 
PRINT '''''' --will print two single quotes 
PRINT 'can''t' --will print can't 
0

एक डबल एकल ('') उद्धरण एक भी एकल उद्धरण की तरह कार्य करेगा जब एक स्ट्रिंग के अंदर शाब्दिक।

क्या आपने एक चर का उपयोग करने का प्रयास किया है?

declare @karl_name varchar(10); 
set @karl_name = '''Karl'''; 

SELECT * FROM Table WHERE [Name] = @karl_name 
0

यह काम करता है:

create table #demo([Name] varchar(max)) 
insert into #demo([Name]) values('''Karl''') 
insert into #demo([Name]) values('Karl') 
declare @query varchar(max) 
set @query = 'SELECT * FROM #demo WHERE [Name] = ''''''Karl''''''' 
EXEC(@query) 

आउटपुट:

'Karl' 

लेकिन अगर 'कार्ल' चर पाठ है, यह अत्यधिक इस बजाय की तरह कुछ का उपयोग करने के लिए सिफारिश की है:

declare @query nvarchar(max) 
declare @param varchar(max) 
set @param = N'''Karl''' 
set @query = N'SELECT * FROM #demo WHERE [Name] = @param' 
exec sp_executesql @query, N'@param varchar(max)', @param 
संबंधित मुद्दे