Создайте таблицу HTML и укажите размер шрифта с помощью SQL FOR XML - PullRequest
2 голосов
/ 15 декабря 2011

Мне нужно написать оператор SQL, который будет возвращать HTML-таблицу и указывать размер шрифта для ее содержимого.

Я нашел некоторую информацию здесь .Решение этой подсказки описывает, как получить XML с элементами, но без атрибутов:

<tr>
    <th>Problem</th>
    <th>Onset</th>
    <th>Status</th>
</tr>
<tr>
    <td>aaa</td>
    <td>bbb</td>
    <td>ccc</td>
</tr>

Но мне нужно написать инструкцию SQL, которая бы выглядела примерно так:

<tr>
    <th><font size="1">Problem</font></th>
    <th><font size="1">Onset</font></th>
    <th><font size="1">Status</font></th>
</tr>
<tr>
    <td><font size="1">aaa</font></td>
    <td><font size="1">bbb</font></td>
    <td><font size="1">ccc</font></td>
</tr>

Ответы [ 2 ]

1 голос
/ 15 декабря 2011

Пара мыслей.

1) Преобразуйте данные SQL в XML в вашем приложении, а не в запросе. В .NET / PHP / Java есть способы получить данные SQL в виде XML.

2) Используйте XSL для преобразования XML из базы данных в HTML

3) Попробуйте использовать CSS вместо <font> тегов.

table td {
    FONT-SIZE: 12px;
}
0 голосов
/ 16 декабря 2011
declare @T table
(
  ProblemType varchar(10),
  Onset date,
  DiagnosisStatus varchar(10)
)

insert into @T values
(  'Ulcer',     '01/01/2008',  'Active'),
(  'Edema',     '02/02/2005',  'Active')

select 
  (select 1 as 'th/@size', 'Problem' as th for xml path(''), type),
  (select 1 as 'th/@size', 'Onset'   as th for xml path(''), type),
  (select 1 as 'th/@size', 'Status'  as th for xml path(''), type)
union all         
select 
  (select 1 as 'td/@size', p.ProblemType     as 'td' for xml path(''), type),
  (select 1 as 'td/@size', p.Onset           as 'td' for xml path(''), type),
  (select 1 as 'td/@size', p.DiagnosisStatus as 'td' for xml path(''), type)
from @T p
for xml path('tr')

Результат:

<tr>
  <th size="1">Problem</th>
  <th size="1">Onset</th>
  <th size="1">Status</th>
</tr>
<tr>
  <td size="1">Ulcer</td>
  <td size="1">2008-01-01</td>
  <td size="1">Active</td>
</tr>
<tr>
  <td size="1">Edema</td>
  <td size="1">2005-02-02</td>
  <td size="1">Active</td>
</tr>
...