Как проанализировать XML в SQL при изменении структуры файла?

#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