Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 FOR XML - сгенерировать комментарии к каждому элементу одноуровневой иерархии  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5975
Сабж. Нужно для некоего конфига (который будут читать и править руками люди). Требуемый выходной вид - а-ля
<device>1</device> <!-- Device 1 -->
<device>2</device> <!-- Device 2 -->
<device>3</device> <!-- Device 3 -->

Что удалось по этому поводу нарыть в инете:
1. Через for xml path:
select top 2 object_id, type_desc as "comment()"
from sys.objects
for xml path('device')

на выходе получаем:
<device>
  <object_id>4</object_id>
  <!--SYSTEM_TABLE-->
</device>
<device>
  <object_id>5</object_id>
  <!--SYSTEM_TABLE-->
</device>

- не устраивает, поскольку нужен один уровень иерархии;
2. Через for xml explicit:
select top 2
  1 tag, null parent,
  object_id [device!1!!Element],
  '<!-- '+type_desc+' -->' [device!1!!xml]
from sys.objects
for xml explicit

- получаем
<device>4<!-- SYSTEM_TABLE --></device>
<device>5<!-- SYSTEM_TABLE --></device>

- не устраивает то, что комментарий попадает внутрь элемента device рядом с текстовым узлом. Можно ли как-то получить структуру, приведенную в первом примере xml? (на данный момент я делаю xml c id и описанием в виде атрибутов, а потом получаю нужный вид посредством xslt, но хотелось бы делать меньше лишних телодвижений)
28 янв 14, 13:46    [15481665]     Ответить | Цитировать Сообщить модератору
 Re: FOR XML - сгенерировать комментарии к каждому элементу одноуровневой иерархии  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
Сон Веры Павловны,

так?
select top 5 object_id as device, type_desc as "comment()"
from sys.objects
for xml path('')
28 янв 14, 14:02    [15481807]     Ответить | Цитировать Сообщить модератору
 Re: FOR XML - сгенерировать комментарии к каждому элементу одноуровневой иерархии  [new]
invm
Member

Откуда: Москва
Сообщений: 9401
select top 2 t.x as [*], type_desc as [comment()]
from sys.objects o cross apply
(select o.object_id as [*] for xml path ('device'), type) t(x)
for xml path('');
28 янв 14, 14:03    [15481816]     Ответить | Цитировать Сообщить модератору
 Re: FOR XML - сгенерировать комментарии к каждому элементу одноуровневой иерархии  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
select top 2 object_id as [device], type_desc as "comment()"
from sys.objects
for xml path('')

получаем
<device>3</device>
<!--SYSTEM_TABLE-->
<device>5</device>
<!--SYSTEM_TABLE-->

что равнозначно
<device>3</device><!--SYSTEM_TABLE-->
<device>5</device><!--SYSTEM_TABLE-->
28 янв 14, 14:10    [15481882]     Ответить | Цитировать Сообщить модератору
 Re: FOR XML - сгенерировать комментарии к каждому элементу одноуровневой иерархии  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5975
daw,
invm,
LexusR,

да, точно, это то, что надо. Что-то я за деревьями леса не увидел :)
Спасибо.
28 янв 14, 14:15    [15481937]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить