У меня есть таблица, назовем ее TBL
, со столбцом типа XML
.
Столбец XML
(названный здесь xml
) имеет формат:
<START xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="87jjhanM">
<Header xmlns="">
...
</Header>
<Fetch xmlns="">
.....
</Fetch>
<Send xmlns="">
<Supplier>
<Deals>
<Deal>
<Field1> </Field1>
<Field2> </Field2>
</Deal>
</Deals>
</Supplier>
<Supplier>
<Deals>
<Deal>
<Field1> </Field1>
<Field2> </Field2>
</Deal>
</Deals>
</Supplier>
</Send>
</START>
Обратите внимание, что каждый документ XML может иметь несколько тегов <Supplier>
. Меня интересует получение значений Field1
и Field2
.
Из чтения, например, Как я могу запросить XML-столбец SQL Server и вернуть все значения для определенного узла? и Получение нескольких записей из столбца xml с помощью value() в SQL Server кажется, что я должен использовать какое-то перекрестное применение.
Я просто не могу заставить его работать. С value()
я вполне способен получить первый найденный экземпляр, но с nodes()
я терплю неудачу (SQL Server).
Моя вопиющая попытка грабежа (здесь только для Field1) для получения всех значений Field1:
SELECT
xml.value('(/Supplier/Deals/Deal/Field1[1])[1]', 'VARCHAR(100)') AS A
FROM
TBL
CROSS APPLY
xml.nodes('/Start/Send') x(A);
который, насколько я понимаю, просто ищет первое значение /Supplier/Deals/Deal/Field1
под каждым /Start/Send/
, но это не работает - он просто возвращает 0 затронутых строк (я знаю, что конкретная структура существует в файлах XML, я должен сказать).
Я уверен, что это довольно просто, но я просто не могу понять, почему это не работает. Любая помощь приветствуется.