2011-05-26 7 views
14
DECLARE @Query nvarchar(max) 
SET @Query ='DECLARE @Test nvarchar(max) 
SELECT @Test = ''\a'\b'\c'' 
SELECT @Test 
PRINT @Query 
exec sp_executesql @Query 

में वापस स्लैश से बचने के लिए कैसे मैं एक \ b \ c के रूप में आउटपुट प्राप्त करने का प्रयास कर रहा हूं। उपरोक्त त्रुटि शायद इसलिए है क्योंकि मैं \ चरित्र से बचने में सक्षम नहीं हूं।SQL सर्वर

उत्तर

15

आप बैकस्लैश (केवल आंतरिक एकल उद्धरण) से बचने के लिए की जरूरत नहीं है:

DECLARE @Query nvarchar(max) 
SET @Query ='DECLARE @Test nvarchar(max) 
SELECT @Test = ''\a\b\c'' 
SELECT @Test' 
PRINT @Query 
exec sp_executesql @Query 
9

वास्तव में नहीं है एक जगह है जहाँ बैक स्लैश की क्या ज़रूरत है एसक्यूएल में भाग निकले जा करने के लिए (या कम से कम विशेष रूप से इलाज किया) सर्वर।

जब बैकस्लैश स्ट्रिंग अक्षर में एक नई पंक्ति से पहले तुरंत बैकस्लैश और नई लाइन हटा दी जाती है।

PRINT 'Foo\ 
Bar' 

रिटर्न

FooBar 

article here इंगित करता है कि इस बल्कि TSQL से भी ग्राहक उपकरणों की एक विशेषता है, लेकिन मुझे नहीं लगता कि इस मामले होने के लिए के रूप में निम्नलिखित कोड एक ही परिणाम है

DECLARE @X VARCHAR(100) = 'PRINT ''Foo\' + CHAR(13) + CHAR(10) + 'Bar'' ' 
EXEC(@X) 

यदि आपको वास्तव में बैकस्लैश के साथ एक स्ट्रिंग अक्षर की आवश्यकता होती है तो कैरिज रिटर्न के बाद आप उन्हें दोगुना कर सकते हैं।

PRINT 'Foo\\ 

Bar' 
0

आप इस कोड की कोशिश परीक्षण करना चाहते हैं:

चयन '\ एक \ b \ ग'

वहाँ बैकस्लैश चरित्र से बचने के लिए कोई जरूरत नहीं है। लेकिन बैकस्लैश प्लस न्यूलाइन कैरेक्टर का मुद्दा एक समस्या है और एसक्यूएल सर्वर इंजन बस इसे काटता है।

आशा मैं - 'ठीक है' उद्धरण में '':

चुनें 'परीक्षण:'

आप स्ट्रिंग पर एक एकल उद्धरण चिह्न लगाने की जरूरत है, तो आप उद्धरण चिह्न चरित्र को दोगुना करने की जरूरत है किसी तरह से मदद की।