У меня есть таблица в SQL Server со столбцом xml, и моя цель - извлечь все данные xml в виде таблицы.
Допустим, мой стол выглядит так:
CREATE TABLE Archive
(
[Id] INT IDENTITY,
[Timestamp] DATETIME,
[XmlDoc] XML,
[Description] NVARCHAR(150)
)
В столбце XmlDoc
содержатся данные XML, подобные следующим:
<Documents>
<Doc>
<DocId>11111</DocId>
<Status>1</Status>
<DocType>DriverLicense</DocType>
<ValidDate>2022-12-31</ValidDate>
</Doc>
<Doc>
<DocId>22222</DocId>
<Status>1</Status>
<DocType>DriverLicense</DocType>
<ValidDate>2022-07-16</ValidDate>
</Doc>
<Doc>
<DocId>33333</DocId>
<Status>2</Status>
<DocType>DriverLicense</DocType>
<ValidDate>2018-11-02</ValidDate>
</Doc>
</Documents>
Мне нужно получить такой стол:
Я пробовал что-то вроде
SELECT
XmlDoc.value('(/Documents/Doc/DocID)[1]', 'int') as [DocID],
XmlDoc.value('(/Documents/Doc/Status)[1]', 'int') as [Status],
XmlDoc.value('(/Documents/Doc/DocType)[1]', 'nvarchar(30)') as [DocType],
XmlDoc.value('(/Documents/Doc/ValidDate)[1]', 'datetime') as [ValidDate]
FROM
dbo.Archive
но возвращает только первый <Doc>
узел каждого xml.
Можно ли получить каждый узел документа в виде отдельной строки?