Для следующей структуры таблицы:
LibraryID(INT) XMLData(NVARCHAR(MAX))
----------- --------------------
1 <Library xmlns:xsi="http:...
2 <Library xmlns:xsi="http:...
3 <Library xmlns:xsi="http:...
XMLData, где TableID = 1, содержит такие значения, как:
<Library xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Books>
<LibraryBook>
<Author>Author 1</Author>
<Title>Title 1</Title>
</LibraryBook>
<LibraryBook>
<Author>Author 2</Author>
<Title>Title 2</Title>
</LibraryBook>
<LibraryBook>
<Author>Author 3</Author>
<Title>Title 3</Title>
</LibraryBook>
</Books>
<Magazines>
...
</Magazines>
</Library>
Я бы хотел, чтобы результат был:
LibraryID(INT) Author Title
----------- --------- -------
1 Author 1 Title 1
1 Author 2 Title 2
1 Author 3 Title 3
2 ... ...
3 ... ...
3 ... ...
Я пробовал выполнить следующий запрос:
;WITH XmlData AS
(
SELECT
LibraryID,
XmlNodes = CAST(XmlData AS XML)
FROM
Library
)
,BrokenDown AS
(
SELECT
LibraryID,
Author = XmlNodes.value('(/Library/Books/LibraryBook/Author)[1]', 'VARCHAR(100)'),
Title = XmlNodes.value('(/Library/Books/LibraryBook/Title)[1]', 'VARCHAR(100)')
FROM
XmlData
)
SELECT * FROM BrokenDown
В выводе указаны только первая книга и название для каждого идентификатора библиотеки:
LibraryID Author Title
--------- ------ -----
1 Author 1 Title 1
2 ... ...
3 ... ...
Любая помощь будет принята с благодарностью .