Одно значение атрибута XML извлечение из SQL Server с помощью xpath

#sql-server #xml #sql-server-2012

#sql-сервер #xml #sql-server-2012

Вопрос:

У меня есть следующий XML, который хранится в столбце xml в таблице SQL Server 2012.

 <Values>
  <V ID="MyValue1" Value="True" />
  <V ID="MyValue2" Value="False" />
</Values>
  

Я пытаюсь получить Value от узла с идентификатором «MyValue1» в качестве логического значения из XML. После небольшого поиска и некоторых ошибок SQL xml я закончил с этим:

 SELECT ID, [Values],
  [Values].value('data(/Values/V[@ID="MyValue1"]/@Value)[1]', 'bit') AS MyBool
FROM [MyXmlValues]
  

Это кажется немного безумным. Нет ли более простого способа (например, без части данных) запросить одно значение через XPath?

Большинство вопросов и примеров в StackOverflow используют [1] для указания узла, но я не могу быть уверен, что мой узел является первым, что следует ожидать в XML.

Комментарии:

1. Нет, для этого нет «ярлыка» или чего-либо еще — это способ «проникнуть» в структуру XML и извлечь значение одного узла

Ответ №1:

Вам не нужно data() . Вы можете использовать

 (/Values/V[@ID="MyValue2"]/@Value)[1]'
  

если вы ожидаете, что больше узлов будут иметь идентификатор, который вы ищете, и Хотите получить их первое значение атрибута (т. Е. Значение атрибута из первого узла, который имеет этот атрибут или

 (/Values/V[@ID="MyValue2"])[1]/@Value'
  

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

Если идентификатор может быть только у одного узла, что кажется разумным, разницы нет.

db<>скрипка