#sql #sql-server #xml #tsql #xpath
#sql #sql-сервер #xml #tsql #xpath
Вопрос:
У меня есть следующая структура XML в столбце (это лишь небольшая ее часть):
<block name="decision">
<subdictionary name="main">
<v id="Profit">126.45</v>
<v id="Check">-99999.00</v>
<v id="RulePath">PD159</v>
<v id="ID">3256423</v>
<v id="Outcome">RejectFinal</v>
<v id="RP">,PD159</v>
</subdictionary>
</block>
То, что я пытаюсь сделать, это проанализировать результат для «Результата», но проблема для меня в том, что для каждого отдельного XML-файла положение «Результата» может измениться.
То, что я пытался до сих пор, это
SELECT
a.XmlResponse.value('(/decisiondocument/block[3]/subdictionary[1]/v)[@Outcome]', 'nvarchar(20)') 'Outcome'
FROM table
но это выдает следующую ошибку:
XQuery [Table_Request.XmlResponse.value()]: ‘value()’ требует одноэлементного (или пустой последовательности), найденного операнда типа ‘xdt:нетипизированный *’
Желаемый результат будет примерно таким:
Column Outcome
1 RejectFinal
2 Approved
3 RejectFinal
Ответ №1:
Используйте этот xpath. Он будет соответствовать всем v
элементам, где id
атрибут соответствует «результату»:
SELECT
a.XmlResponse.value('(//v[@id="Outcome"])[1]', 'varchar(100)')
FROM t