Одно значение атрибута XML извлечь из SQL Server с помощью xpath - PullRequest
0 голосов
/ 20 апреля 2019

У меня есть следующий 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 Ответ

1 голос
/ 20 апреля 2019

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

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

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

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

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

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

дБ <> скрипка

...