использование для XML в SQL - PullRequest
0 голосов
/ 05 мая 2011

У меня есть такой код для объединения значений из нескольких строк

ввод:

ID             Name
-------------  ----------------------
1              Deepak Kumar Goyal
2              Niladri Biswas
2              Priyanka Sarkar
3              Sumi Girijan
3              Suresh Beldar
3              Jeeva Baby

ожидаемый результат:

ID      Name
------- --------------------------------------------------
1       Deepak Kumar Goyal
2       Niladri Biswas OR Priyanka Sarkar
3       Sumi Girijan AND Suresh Beldar AND Jeeva Baby

использованный запрос:

select ID, SUBSTRING(
(
select  ','+CAST(name AS VARCHAR)
from  @t a where a.ID = b.ID
FOR XML PATH('') 
),2,2000) as names
 from @t b group by id

Запрос выполняется успешно. Можете ли вы помочь мне понять необходимость XML здесь и как и почему он работает?

1 Ответ

1 голос
/ 05 мая 2011

Это обычное (неправильное?) Использование предложения FOR XML SQL Server.SQL Server не имеет функции group_concat, которую имеют некоторые другие реализации SQL (например, MySQL), которая позволяет запросу объединять несколько полей в одно поле.

Предложение FOR XML указывает серверу объединить результирующие строки в XML-документ, и он делает это путем объединения значений указанного поля.В приведенном выше запросе вы используете конкатенацию строк, используемую для генерации XML, и добавляете запятую (безусловно, не XML) в этот процесс.

Короче говоря: это взлом, но он работает хорошо и широко используется.

Подробнее здесь: http://msdn.microsoft.com/en-us/library/ms178107.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...