Поле запроса XML в таблице сервера SQL - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь запросить данные из поля XML, что-то новое для меня.Несмотря на большой поиск, я не могу найти хороший пример, который работает с моими данными.Итак ...

В таблице есть поля ReceiptId (PKey) и XMLData. Поле XMLData выглядит следующим образом ...

<?xml version="1.0" encoding="utf-8"?>
<receipt number="1" datetime="Wed May 15 08:08:39 PDT 2019" total="75.00">
<items>
<item productid="MULTI" quantity="1" amount="184.00" />
<fees>
<f feeid="Fee1" calculated="5.00" reason="" />
<f feeid="Fee2" calculated="10.00" reason="" />
<f feeid="Fee3" calculated="15.00" reason="" />
<f feeid="Fee4" calculated="20.00" reason="" />
<f feeid="Fee5" calculated="25.00" reason="" />
</fees>
</items>
</receipt>

Теперь вопрос ... Что бы мой SQLВыберите be, чтобы получить рассчитанную сумму для Fee3 (например, 15.00)?Бывали случаи, когда Fee3 отсутствует в XMLData, поэтому мне понадобится какой-то оператор Exists ().

Спасибо за помощь в создании полного новичка.

1 Ответ

0 голосов
/ 18 июня 2019

Предполагая, что ваше значение хранится как xml, вы можете сделать:

DECLARE @XML xml = '<?xml version="1.0" encoding="utf-8"?>
<receipt number="1" datetime="Wed May 15 08:08:39 PDT 2019" total="75.00">
<items>
<item productid="MULTI" quantity="1" amount="184.00" />
<fees>
<f feeid="Fee1" calculated="5.00" reason="" />
<f feeid="Fee2" calculated="10.00" reason="" />
<f feeid="Fee3" calculated="15.00" reason="" />
<f feeid="Fee4" calculated="20.00" reason="" />
<f feeid="Fee5" calculated="25.00" reason="" />
</fees>
</items>
</receipt>';

SELECT f.value('@calculated','varchar(5)') AS calculated
FROM (VALUES(@XML))V(X)
     CROSS APPLY V.X.nodes('receipt/items/fees/f') X(f)
WHERE f.value('@feeid','varchar(5)') = 'Fee3';

Вы используете nodes для разделения данных на 1 строку на элемент f, а затем value для получения value.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...