J'ai importé un document XML dans SQL Server, j'essaie maintenant d'importer différentes parties dans différentes tables. Lorsque j'utilise la requête ci-dessous, elle ne renvoie qu'une seule ligne de hotel_facilities, je dois retourner toutes les hotel_facilities avec hotel_ref.Renvoyer tous les noeuds xml dans SQL Server
DECLARE @Details xml
SET @Details = '<hotels>
<hotel>
<hotel_ref>105</hotel_ref>
<hotel_facilities>
<id>2</id>
<name>Disabled Facilities</name>
<id>4</id>
<name>24 Hour Reception</name>
<id>12</id>
<name>Restaurant</name>
</hotel_facilities>
</hotel>
</hotels>'
SELECT tab.col.value('../hotel_ref[1]','varchar(100)') AS 'hotel_ref',
tab.col.value('./id[1]','varchar(100)') AS 'HotelFacilityID',
tab.col.value('./name[1]','varchar(100)') AS 'HotelFacilityName'
FROM @Details.nodes('//hotels/hotel/hotel_facilities') AS tab(col)
Je cherchais quelque chose de similaire, mais depuis le « id » et éléments « nom » vraiment ne pas avoir une association entre eux à l'intérieur du noeud, J'ai peur qu'à un moment donné, vous finissiez par rassembler un identifiant et un nom qui ne sont pas ensemble ... mais honnêtement, je ne vois pas non plus une meilleure solution. –
Vous aviez raison depuis le début, c'est un problème de schéma XML. J'ai juste supposé que Steve ne peut pas changer le schéma et que l'ordre des éléments XML détermine leur relation. Et vous avez encore raison que nous pourrions nous retrouver avec de mauvaises associations. –
Je viens de recevoir le fichier XML et n'ai aucun contrôle sur elle. Le problème avec les deux solutions est que lorsque vous ajoutez un autre nœud d'hôtel avec ses fonctions hotel_files, les deux solutions répètent les nœuds pour chaque hôtel. – steve