2013-06-07 5 views
4

Привет Я использую SQLServer2008.Как преобразовать значения из одного столбца в список, разделенный запятыми?

В моем столе есть одно поле «Код».

Когда я пишу запрос,

select Code from Table1 

то это дает ниже выход

Code 
---- 
9 
8 
7 
6 
5 
10 
31 

и мой требуется выход:

["9","8","7","6","5","10","31"] 

У меня есть ок 14000 код в таблице. Как я могу получить этот результат? Благодарю.

ответ

0

Попробуйте это

declare @formattdstring varchar(100) 
set @formattdstring='' 
select @[email protected]+'"'+ Code +'",' from Table1 
select '['[email protected]+']' as formattedstring 

Ура !!!

+2

Очень рискованно и не гарантированно работает. Если сервер генерирует параллельный план, он может оценивать '@ formattdstring = @ formattdstring + '"' + Code + '",'' для нескольких потоков и не сериализовать доступ к переменной, в результате чего некоторые строки будут исключены из результата. –

+0

@ Damien_The_Unbeliever любые доказательства? –

+1

Полностью согласен с комментарием @Damien_The_Unbeliever. Извините, но ваш запрос - плохая практика. – Devart

1

Вот ваш запрос:

DECLARE @var varchar(8000) 
SET @var = '[' 
SELECT @var = @var + '"' + convert(varchar(100),Code) + '",' FROM Table1 
SET @var = SUBSTRING(@var,0,LEN(@var)) + ']' 

SELECT @var 

SUBSTRING(@var,0,LEN(@var)) удаляет ненужные запятой в конце строки

+2

Очень рискованно и не гарантированно работает. Если сервер генерирует параллельный план, он может оценивать '@var = @var + '"' + convert (varchar (100), Code) + '",'' для нескольких потоков и не сериализовать доступ к переменной, в результате чего некоторые строки исключаются из результата. –

3

Попробуйте один -

DECLARE @temp TABLE(Code INT) 
INSERT INTO @temp (Code) 
VALUES (9),(8),(7),(6),(5),(10),(31) 

SELECT STUFF((
    SELECT ', "' + CAST(Code AS VARCHAR(10)) + '"' 
    FROM @temp 
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '[') + ']' 

Выход:

["9", "8", "7", "6", "5", "10", "31"] 
+0

Спасибо, но я отредактировал мой вопрос. У меня около 14000 кода в моей таблице. – Prashant16

+1

заменить 'INSERT INTO @ temp (Code) ЗНАЧЕНИЯ (9), (8), (7), (6), (5), (10), (31)' с 'INSERT INTO @temp (Код) выберите код из таблицы1' – rivarolle

+0

@rivarolle, спасибо за комментарий. – Devart

1
try this 
DECLARE @Str VARCHAR(MAX) 
SELECT @Str = COALESCE(@Str + ',', '') + '"'+CAST(Code AS VARCHAR(50))+'"' 
FROM Table1 


SELECT '['[email protected]+']' 
Смежные вопросы