Я только что обнаружил (по необходимости), что TSQL обладает некоторыми функциями для извлечения данных из столбцов, содержащих XML. У меня есть столбец Sql Server, который содержит данные XML (хотя тип столбца не xml ... это varchar). Я должен извлечь подмножество данных из столбца. Упрощенная запись будет выглядеть примерно так:
declare @Table as table(id char(1), datacolumn xml)
insert into @table
select 'a', '<root><vnode v="5" /><vnode v="8" /></root>'
insert into @table
select 'b', '<root><vnode v="7" /></root>'
id datacolumn
--- -----------------------------------------
a <root><vnode v="5" /><node v="8" /></root>
b <root><vnode v="7" /></root>
Итак, я хотел бы предложить запрос, который бы возвращал что-то вроде:
id data
--- ----
a 5
a 8
b 7
Я дошел до того, что смог получить некоторую информацию ... но мне не хватает некоторых концепций.
select id, T.c.value('node[1]', 'varchar(100)') mdata
from @table
cross apply datacolumn.nodes('/root') AS T(c)
Проблемы:
- Это даст мне значение внутри vnode (которое пусто), но мне нужно значение для атрибута, помеченного как "v".
- Кроме того, потому что у меня есть [1] там, я получаю первый узел ... но я хочу все из них ... но еще не нашел концепцию для этого.