Правильный синтаксис для SQL-запросов с XML - PullRequest
0 голосов
/ 07 мая 2019

Мой DataXML выглядит следующим образом

<TestResults>    
<MethodResult>
X
X
<StepResult name="BluetoothERROR">
X
X
X
X
X
X
X
<StepResult name="FLOWERROR1">
        <Number value="-100" />
      </ActualValue>
X
X
<StepResult name="PowerOffError">
X
X
X
    </StepResult>
  </MethodResult>
</TestResults>

Где X означает другие экземпляры StepResult с другим именем, например BluetoothError или PowerOffError.Предположим, что другие StepResults могут иметь аналогичные выходы как «FLOWERROR1».

Меня особенно интересует StepResult с именем «FlowError1», и я хотел бы вернуть значение Number -100.

Я пробовал эту строку кода, и она не работала и показывает только Nulls.

f.ResultXML.value('(/TestResults/MethodResult/StepResult/ActualValue/Number/@Value)[1]', 'varchar(max)') As "Actual Value"

Что я должен был сделать вместо этого?

1 Ответ

0 голосов
/ 07 мая 2019

Вы можете отфильтровать узлы по имени и вернуть значение первого соответствующего узла:

select @data.value('(TestResults/MethodResult/StepResult[@name="FLOWERROR1"]/ActualValue/Number)[1]/@value', 'int')

db<>fiddle demo

См. Introduction to Using XPath Queries и XQuery Language Reference.

...