Пары значений таблицы SQL в XML - PullRequest
2 голосов
/ 20 ноября 2010

У меня есть таблица данных следующим образом

ID      Key     Value
--------------------------
1       F1      2
2       F2      5
3       F3      1

Используя TSQL в SQL Server 2005, как я могу преобразовать это в XML как

<Values>
  <F1>2</F1>
  <F2>5</F2>
  <F3>1</F3>
</Values>

Пожалуйста, помогите.

Ответы [ 2 ]

4 голосов
/ 20 ноября 2010

Насколько я знаю, даже тайный for xml explicit не позволяет вам называть теги XML на основе столбца. Если есть несколько разных ключей, вы можете обойти это, перечислив их:

select  case when [key] = 'F1' then [value] end as [F1]
,       case when [key] = 'F2' then [value] end as [F2]
,       case when [key] = 'F3' then [value] end as [F3]
from    @t
for xml path(''), root('Values')

Если ключей много, вы можете создать строку XML вручную:

declare @output varchar(max)
set @output = '<Values>'

select  @output = @output + 
            '<' + [key] + '>' + 
            CAST([value] as varchar(32)) + 
            '</' + [key] + '>'
from    @t

set @output = @output + '</Values>'

select @output

Данные испытаний:

declare @t table (id int, [key] varchar(3), value int)
insert @t values (1, 'F1', 2)
insert @t values (2, 'F2', 5)
insert @t values (3, 'F3', 1)

Обе альтернативы печати:

<Values><F1>2</F1><F2>5</F2><F3>1</F3></Values>
1 голос
/ 20 ноября 2010

Почему бы просто не сделать запрос к таблице, сохранить строки в массиве и вывести их (в файл или на экран), используя ваш (предположительно сервер) язык сценариев?Если есть способ заставить SqlServer выводить подобное, я не знаю об этом, но он должен быть довольно простым практически на любом языке.

Псевдокод

LET arr = array of table rows
print "<Values>"
foreach in arr as row
  print "<" + row['Key'] + ">" + row['Value'] + "</" + row['Key'] + ">"
end foreach
print "</Values>"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...