Подтвердить что ты не робот

Преобразование результата SQL Server в строку

Я получаю результат в SQL Server как

SELECT StudentId FROM Student WHERE condition = xyz

Я получаю вывод как

StudentId
1236

7656

8990
........

Выходным параметром хранимой процедуры является строка @studentId, и я хочу, чтобы оператор return

1236, 7656, 8990.

Как преобразовать вывод в одну строку?

Я возвращаю один столбец [т.е. StudentId]

4b9b3361

Ответ 1

Проверьте это:

 DECLARE @result NVARCHAR(MAX)

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

Ответ 2

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

Ответ 3

Оба ответа действительны, но не забудьте инициализировать значение переменной, по умолчанию это NULL и T-SQL:

NULL + "Any text" => NULL

Это очень распространенная ошибка, не забывайте!

Также неплохо использовать функцию ISNULL:

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

Ответ 4

Используйте функцию COALESCE:

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

Ответ 5

Используйте функцию CONCAT, чтобы избежать ошибок преобразования:

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

Ответ 6

или один оператор 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;

Ответ 7

Это работает с NULL-значениями в таблице и не требует операции подстроки в конце. COALESCE не очень хорошо работает со значениями NULL в таблице (если они будут там).

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

select @results