2011-01-27 11 views
33

io sono sempre il risultato in SQL Server comeConverti risultato SQL Server impostato nella stringa

SELECT StudentId FROM Student WHERE condition = xyz 

sto ottenendo l'output come

 
StudentId 
1236 

7656 

8990 
........ 

Il parametro di uscita della stored procedure è @studentId corda e Voglio l'estratto conto come

1236, 7656, 8990. 

Come posso convertire l'uscita in la singola stringa?

Sto restituendo una singola colonna [es. StudentID]

risposta

32

Verifica questo:

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

Ho appena provato questo codice e funziona. Solo piccola regolazione: seleziona sottostringa (@result, 1, len (@result) -1) per rimuovere l'extra "," – Eden

+2

Provato questo e l'ultima riga non funziona correttamente in SQL Server 2008. sottostringa '(@result , 1, len (@result)) 'rimuove la virgola finale, mentre la versione precedente rimuove anche il carattere prima della virgola. :) – async

+1

dovrebbe essere 'sottostringa (@result, 1, len (@result) - 1)' http://msdn.microsoft.com/en-GB/library/ms187748.aspx – Robino

7

Entrambe le risposte sono validi, ma non dimenticate di initializate il valore della variabile, per impostazione predefinita è nullo e con T-SQL:

NULL + "Any text" => NULL 

E 'un errore molto comune, non dimenticarlo!

è anche buona idea di utilizzare la funzione ISNULL:

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

o di una singola istruzione select ...

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

Utilizzare la funzione COALESCE:

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

Se lo StudentId proviene da una colonna non varchar, probabilmente otterrai un'eccezione di conversione. È necessario utilizzare la funzione CONCAT per eseguire una concatenazione corretta. Vedi la risposta qui sotto. –

0

Questo funziona con i valori NULL nella tabella e non richiede l'operazione di sottostringa alla fine. COALESCE non funziona molto bene con i valori NULL nella tabella (se ci saranno).

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

utilizzare la funzione CONCAT per evitare errori di conversione:

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