Je pense que ce dont j'ai besoin est CROSS APPLY, mais je n'arrive pas à comprendre la syntaxe. J'ai un ensemble de XML dans une base de données MSSQL 2008 qui ressemble à ceci:Mixer les parents XML et les enfants dans MSSQL
<Cookie>
<id>Chocolate Chip</id>
<ChocolateChipPeanutButter>
...
</ChocolateChipPeanutButter>
<ChocolateChipPecan>
...
</ChocolateChipPecan>
</Cookie>
<Cookie>
<id>Raisin</id>
</Cookie>
<Cookie>
<id>Coconut</id>
</Cookie>
<Cookie>
<id>Sugar</id>
</Cookie>
Je suis en train de couper le XML pour que j'ai un jeu de résultats qui ressemble à ceci:
Cookie Name Cookie SubName
___________ ______________
Chocolate Chip <null>
Chocolate Chip ChocolateChipPeanutButter
Chocolate Chip ChocolateChipPecan
Raisin <null>
Coconut <null>
Sugar <null>
Je pense que je dois écrire quelque chose comme ceci (en supposant que les données XML sont stockées dans DECLARE @XMLData XML:
SELECT
TheXML.TheCookie.query('data(./id)') AS CookieName
, TheXML.TheCookie.query('.') AS CookieData
, Sub.SubCookieName AS SubCookieName
FROM
@XMLData.nodes('//Cookie') AS TheXML(TheCookie)
CROSS APPLY
(
SELECT
TheCookieXML.SubCookieName.query('local-name(.)')
FROM
CookieData.nodes('./*') AS TheCookieXML(SubCookieName)
)
Je sais, je sais, ce schéma XML est terrible pour ce que j'essaie de faire avec, mais supposons que nous sommes coincés avec les données de cette façon et travaillons à partir de là. Suis-je sur la bonne voie? Est-ce que CROSS APPLY fonctionnera jamais comme ça? Est-ce que Batman peut même me sauver maintenant?
Prototype de Cookie maître 2010 Microsoft peut-être :-) –