Преобразование данных XML в табличную и XML-форму в SQL Server 2005 - PullRequest
3 голосов
/ 29 апреля 2011

Это мой XML

<ROOMTYPES>
  <ROOMTYPE Id="1" Total="5">
    <ROOMFACILITIES>
      <FID>101</FID>
      <FID>103</FID>
      <FID>105</FID>
    </ROOMFACILITIES>
  </ROOMTYPE>
  <ROOMTYPE Id="2" Total="4">
    <ROOMFACILITIES>
      <FID>108</FID>
      <FID>109</FID>
      <FID>110</FID>
    </ROOMFACILITIES>
  </ROOMTYPE>
</ROOMTYPES>

Мне нужно сделать XQuery, который бы отображал результат, подобный этому

int int xml
1   5   <FID>101</FID><FID>103</FID><FID>105</FID>
2   4   <FID>108</FID><FID>109</FID><FID>110</FID>

Я достиг здесь ..

int int xml
1   5   <FID>101</FID><FID>103</FID><FID>105</FID>
2   4   <FID>101</FID><FID>103</FID><FID>105</FID>

используя это

declare @xmldocument xml;
set @xmldocument =( select RoomTypes from Hotels);

declare @tb table(id int, total int, fid xml);
declare @id int;
set @id=0;
insert into @tb (id, total,fid)

select  
    p.value('../@Id', 'int'),
    p.value('../@Total', 'int'),
    p.query('//ROOMTYPE[@Id=1]/ROOMFACILITIES/FID')

from @xmldocument.nodes('ROOMTYPES/ROOMTYPE/ROOMFACILITIES') n(p)
select * from @tb;

Поскольку я жестко закодировал @ Id = 1, он показывает результат только первого элемента.

Любая помощь приветствуется ...

1 Ответ

2 голосов
/ 29 апреля 2011
select  
    p.value('../@Id', 'int'),
    p.value('../@Total', 'int'),
    p.query('FID')
from @xmldocument.nodes('ROOMTYPES/ROOMTYPE/ROOMFACILITIES') n(p)
...