Я думаю, что мне нужен CROSS APPLY, но я не могу понять синтаксис. У меня есть набор XML в базе данных MSSQL 2008, который выглядит следующим образом:
<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>
Я пытаюсь разделить XML так, чтобы у меня был набор результатов, который выглядит следующим образом:
Cookie Name Cookie SubName
___________ ______________
Chocolate Chip <null>
Chocolate Chip ChocolateChipPeanutButter
Chocolate Chip ChocolateChipPecan
Raisin <null>
Coconut <null>
Sugar <null>
Я думаю, мне нужно написать что-то вроде этого (предположим, что данные XML хранятся в 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)
)
Я знаю, я знаю, эта XML-схема ужасна из-за того, что я пытаюсь с ней сделать, но давайте предположим, что мы застряли с данными таким образом и работаем оттуда. Я на правильном пути? Будет ли CROSS APPLY когда-нибудь работать так? Может ли даже Бэтмен спасти меня сейчас?