Как вытащить данные из xml в t-sql?
есть xml
<root>
<oid>F602E64B-0156-4E58-8824-616FE1BA0DDE</oid>
<stype>save</stype>
<docs>2C3EE067-9D30-4795-95B2-0D8EADEECF9C</docs>
<docs>CF90C191-5B5D-471E-B414-57D97397595C</docs>
<docs>276D444C-98D1-4CB4-BB63-CB454A1939D9</docs>
<root>
как в sql server можно заселектить узлы docs? многое перепробовал, но ничего не получилось.
Ответы (2 шт):
Автор решения: Vladimir Afanasyev
→ Ссылка
Вам надо использовать cross apply:
Select XmlColumn.query('.', 'nvarchar(256)') docsValue
from XTable cross apply XTable.v.nodes('/root/docs') AS AdditionalTable(XmlColumn)
XTable - таблица, в которой xml поле
v - название xml поля
Автор решения: Nick Proskuryakov
→ Ссылка
Обратите внимание на то что тэг <root> у вас не закрыт.
Возможно именно поэтому у вас возникли сложности.
Исправив эту ошибку, получить информацию можно так:
DECLARE @XML AS XML
SELECT @XML =
N'<root>
<oid>F602E64B-0156-4E58-8824-616FE1BA0DDE</oid>
<stype>save</stype>
<docs>2C3EE067-9D30-4795-95B2-0D8EADEECF9C</docs>
<docs>CF90C191-5B5D-471E-B414-57D97397595C</docs>
<docs>276D444C-98D1-4CB4-BB63-CB454A1939D9</docs>
</root>'
SELECT xmlData.A.value('.', 'VARCHAR(100)') AS docs
FROM @XML.nodes('root/docs') xmlData(A)