sql >> Databáze >  >> RDS >> Sqlserver

XPath k načtení hodnoty SQL XML

Aktualizovat

Moje doporučení by bylo rozdělit XML na vztahy a prohledávat a spojovat výsledný vztah způsobem orientovaným na množinu, spíše než procedurálním způsobem prohledávání konkrétních uzlů v XML. Zde je jednoduchý dotaz XML, který skartuje uzly a atributy, které vás zajímají:

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)

Pokud však musíte použít cestu XPath, která načte přesně hodnotu zájmu:

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)

Pokud jsou stepID a ID komponenty sloupce, nikoli proměnné, měli byste ve filtrech XPath použít sql:column() místo sql:variable. Viz Vazba relačních dat uvnitř dat XML .

A nakonec, pokud vše, co potřebujete, je zkontrolovat existenci, můžete použít exist( ) Metoda 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. Spojte dvě tabulky pomocí id a potomků ze stromové tabulky

  2. Jak najít tabulku se specifickým sloupcem v postgresql

  3. Skryté pole Data se nevkládají do Mysql

  4. Odstraňte dotaz generující UncategorizedSQLException a problém s pamětí ORACLE v rámci SPRING