У меня есть SQL Серверная база данных с таблицей FormTable
, которая имеет столбец DataXML
в формате xml.
Данные в этом столбце XML выглядят следующим образом:
<Form>
<Section name="metric1">
<InputNumber type="int" min="0" max="100" title="Length of the box.">
<Value>50</Value>
</InputNumber>
<PickList title="Is the shape square?">
<Option selected="true">Yes</Option>
<Option>No</Option>
<Option>No standard shape</Option>
</PickList>
</Section>
</Form>
XML содержит еще много тегов InputNumber
и PickList
. Я написал этот запрос для получения необходимых данных. Возвращает:
- категория - номер строки - заголовок
- метрика1 - 1 - длина поля
- метрика1 - 2 - это поле квадрат формы?
SELECT
tbl.FormId,
category = c.value(''../../@name'', ''VARCHAR(max)''),
ROW_NUMBER() OVER (order by (select 1)) as RowNumber,
c.value(''../@title'',''VARCHAR(max)'') AS [title]
FROM
FormTable AS tbl
CROSS APPLY
tbl.DataXML.nodes(''/Form[1]/Section/*[local-name() = ("PickList", "InputNumber"")]/*[local-name() = ("Value", "Option")]'') AS t(c)
WHERE
Formid = '10';
Теперь я хочу вернуть еще один столбец с именем value, и результат должен выглядеть следующим образом:
- category - номер строки - title - - значение
- метрика1 - 1 - Длина коробки - 50
- метрика1 - 2 - Квадрат формы? - Да
Как получить столбец значений?