Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

XPath за извличане на SQL XML стойност

Актуализация

Моята препоръка би била да раздробявате XML на релации и да правите търсения и съединявания на получената релация, по ориентиран към набори начин, а не по процедурния начин на търсене на конкретни възли в XML. Ето една проста XML заявка, която разкъсва възлите и атрибутите, представляващи интерес:

select x.value(N'../../../../@stepId', N'int') as StepID
  , x.value(N'../../@id', N'int') as ComponentID
  , x.value(N'@nom',N'nvarchar(100)') as Nom
  , x.value(N'@valeur', N'nvarchar(100)') as Valeur
from @x.nodes(N'/xml/box/components/component/variables/variable') t(x)

Ако обаче трябва да използвате XPath, който извлича точно интересуващата ви стойност:

select x.value(N'@valeur', N'nvarchar(100)') as Valeur
from @x.nodes(N'/xml/box[@stepId=sql:variable("@stepID")]/
    components/component[@id = sql:variable("@componentID")]/
       variables/variable[@nom="Enabled"]') t(x)

Ако stepID и ID на компонента са колони, а не променливи, трябва да използвате sql:column() вместо sql:variable във филтрите на XPath. Вижте Обвързване на релационни данни в XML данни .

И накрая, ако всичко, от което се нуждаете, е да проверите за съществуване, можете да използвате exist( ) XML метод:

select @x.exist(
  N'/xml/box[@stepId=sql:variable("@stepID")]/
    components/component[@id = sql:variable("@componentID")]/
      variables/variable[@nom="Enabled" and @valeur="Yes"]') 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да активирате улавянето на промяна на данни (CDC) в база данни в SQL Server - урок за SQL Server

  2. Използвайте set в оператор case в SQL Server

  3. SQL заявка; хоризонтално към вертикално

  4. Проверете дали низът съдържа знаци с ударение в SQL?

  5. Проблем с изходния параметър на SQL Server