2011-01-27 25 views
33

estoy consiguiendo el resultado en SQL Server comoConvertir resultado de SQL Server pone en cadena

SELECT StudentId FROM Student WHERE condition = xyz 

estoy recibiendo la salida como

 
StudentId 
1236 

7656 

8990 
........ 

El parámetro de salida del procedimiento almacenado es @studentId cuerda y Quiero la declaración de devolución como

1236, 7656, 8990. 

¿Cómo puedo convertir la salida en la única cuerda?

Estoy devolviendo una sola columna [es decir. StudentId]

Respuesta

32

Prueba esto:

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

He intentado este código y funciona. Solo ajuste menor: seleccionar subcadena (@result, 1, len (@result) -1) para eliminar el extra "," – Eden

+2

Probé esto y la última línea no funciona correctamente en SQL Server 2008. 'substring (@result) , 1, len (@result)) 'elimina la coma final, mientras que la versión anterior elimina el carácter antes de la coma también. :) – async

+1

debe ser 'substring (@result, 1, len (@result) - 1)' http://msdn.microsoft.com/en-GB/library/ms187748.aspx – Robino

7

Ambas respuestas son válidas, pero no se olvide de initializate el valor de la variable, por defecto es NULL y con T-SQL:

NULL + "Any text" => NULL 

Es un error muy común, no lo olvides!

También es buena idea utilizar la función ISNULL:

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

o una sola instrucción de selección ...

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

Utilice la función COALESCE:

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

Si StudentId proviene de una columna no varchar, es probable que obtenga una excepción de conversión. Necesita usar la función CONCAT para realizar la concatenación adecuada. Ver la respuesta a continuación. –

0

Éste trabaja con valores NULL en la tabla y no requiere la operación de subcadenas al final. COALESCE no está funcionando bien con valores NULL en la tabla (si estarán allí).

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

utilizar la función CONCAT para evitar errores de conversión:

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