Как преобразовать столбцы xml в значения html в sql?

#sql #sql-server

#sql #sql-сервер

Вопрос:

Я загрузил некоторые значения в таблицу #Temp, как показано ниже,

 Select 12 as ReporterID,'<tr><td>Saravanan</td></tr>' As Body into #Temp
Insert into #Temp values(12,'<tr><td>Yogaraj</td></tr>')
Insert into #Temp values(22,'<tr><td>Daniel</td></tr>')
Insert into #Temp values(22,'<tr><td>Mathan</td></tr>')
 

Я хочу, чтобы вывод выглядел так,

  Reporter              Body 
   12        '<tr><td>Saravanan</td></tr>tr><td>Yogaraj</td></tr>'
   22        '<tr><td>Daniel</td></tr>tr><td>Mathan</td></tr>'
 

Я попытался преобразовать приведенный ниже код в xml. но я хочу его в html.

 SELECT DISTINCT tttm.ReporterID
       , STUFF((
            SELECT ','   t.Body
            FROM #Temp T
            WHERE T.ReporterID = tttm.ReporterID
            FOR XML PATH('table')
            ), 1, 1, '') AS tags_title
--into #XML
from #Temp tttm
 

кто-нибудь, пожалуйста, помогите мне найти решение. Заранее спасибо.

Комментарии:

1. sql server v17.9.1

Ответ №1:

Примечание: Это, вероятно, не лучшее решение, но я считаю, что оно выполняет то, что вы хотите.

Что вы можете сделать, так это создать вложенный запрос: внешний запрос группируется по ReporterID , а внутренний запрос выдает вам нужный XML. Это похоже на вашу попытку. Но с моим решением я td удаляю текст, а затем помещаю его обратно в требуемые элементы в FOR XML части запроса:

 SELECT
    ReporterID,
    (
        SELECT Body.query('//td/text()') AS td
        FROM @tmp AS t2
        WHERE t2.ReporterID = t1.ReporterID
        FOR XML PATH('tr'), ROOT('table')
    ) AS combined_body
FROM @tmp AS t1
GROUP BY ReporterID
;
 

здесь работает скрипка.