2011-01-27 15 views
33

मैंConvert एसक्यूएल सर्वर परिणाम स्ट्रिंग

SELECT StudentId FROM Student WHERE condition = xyz 

मैं की तरह

 
StudentId 
1236 

7656 

8990 
........ 

संग्रहीत प्रक्रिया के उत्पादन पैरामीटर उत्पादन हो रही है के रूप में एसक्यूएल सर्वर में परिणाम हो रही है में सेट किया गया है @studentId स्ट्रिंग और मैं वापसी विवरण

1236, 7656, 8990. 

मैं आउटपुट को कैसे परिवर्तित कर सकता हूं एकल स्ट्रिंग?

मैं एकल कॉलम लौटा रहा हूं [यानी। ,

NULL + "Any text" => NULL 

यह एक बहुत ही आम गलती है: StudentId]

उत्तर

32

टेस्ट इस:

DECLARE @result NVARCHAR(MAX) 

SELECT @result = STUFF(
         ( SELECT ',' + CONVERT(NVARCHAR(20), StudentId) 
          FROM Student 
          WHERE condition = abc 
          FOR xml path('') 
         ) 
         , 1 
         , 1 
         , '') 
49
DECLARE @result varchar(1000) 

SET @result = '' 

SELECT @result = @result + StudentId + ',' FROM Student WHERE condition = xyz 

select substring(@result, 0, len(@result) - 1) --trim extra "," at end 
+2

मैं सिर्फ इस कोड की कोशिश की है और यह काम करता है। बस मामूली समायोजन: अतिरिक्त "," – Eden

+2

को निकालने के लिए substring (@result, 1, len (@result) -1) का चयन करें, यह कोशिश करें और अंतिम पंक्ति SQL Server 2008 में सही तरीके से काम नहीं करती है। 'Substring (@result , 1, लेन (@result)) 'पिछला कॉमा हटा देता है, जबकि उपरोक्त संस्करण को अल्पविराम से पहले चरित्र को हटा देता है। :) – async

+1

'substring (@result, 1, len (@result) - 1) होना चाहिए 'http://msdn.microsoft.com/en-GB/library/ms187748.aspx – Robino

7

दोनों उत्तर मान्य हैं, लेकिन भूल नहीं है चर के मूल्य initializate को डिफ़ॉल्ट रूप से शून्य और टी SQL के साथ है इसे मत भूलना!

SELECT @result = @result + ISNULL(StudentId + ',', '') FROM Student 
0

या एक ही चयन बयान ...

DECLARE @results VarChar(1000) 
SELECT @results = CASE 
    WHEN @results IS NULL THEN CONVERT(VarChar(20), [StudentId]) 
    ELSE ', ' + CONVERT(VarChar(20), [StudentId]) 
    END 
FROM Student WHERE condition = abc; 
6

उपयोग COALESCE समारोह

भी अच्छा विचार IsNull समारोह का उपयोग करने के लिए है:

DECLARE @StudentID VARCHAR(1000) 
SELECT @StudentID = COALESCE(@StudentID + ',', '') + StudentID 
FROM Student 
WHERE StudentID IS NOT NULL and Condition='XYZ' 
select @StudentID 
+0

यदि छात्र आईडी गैर वर्चर कॉलम से आ रहा है, तो आपको शायद एक रूपांतरण अपवाद मिलेगा। उचित कॉन्सटेनेशन करने के लिए आपको CONCAT फ़ंक्शन का उपयोग करने की आवश्यकता है। नीचे जवाब देखें। –

0

यह तालिका में कुल मूल्यों के साथ काम करता है और अंत में सबस्ट्रिंग ऑपरेशन की आवश्यकता नहीं है। COALESCE तालिका में नल मानों के साथ वास्तव में अच्छी तरह से काम नहीं कर रहा है (अगर वे वहां होंगे)।

DECLARE @results VARCHAR(1000) = '' 
SELECT @results = @results + 
      ISNULL(CASE WHEN LEN(@results) = 0 THEN '' ELSE ',' END + [StudentId], '') 
FROM Student WHERE condition = xyz 

select @results 
1

रूपांतरण त्रुटियों से बचने के CONCAT समारोह का उपयोग करें:

DECLARE @StudentID VARCHAR(1000) 
SELECT @StudentID = CONCAT(COALESCE(@StudentID + ',', ''), StudentID) 
FROM Student 
WHERE StudentID IS NOT NULL and Condition='XYZ' 
select @StudentID 
संबंधित मुद्दे