sql >> Database teknologi >  >> RDS >> Sqlserver

XPath for at hente SQL XML-værdi

Opdater

Min anbefaling ville være at makulere XML'en i relationer og foretage søgninger og joinforbindelser på den resulterende relation, på en sæt orienteret måde, snarere end den proceduremæssige måde at søge efter specifikke noder i XML. Her er en simpel XML-forespørgsel, der makulerer noder og attributter af interesse:

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)

Men hvis du skal bruge en XPath, der henter præcis værdien af ​​interesse:

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)

Hvis stepID og komponent ID er kolonner, ikke variabler, skal du bruge sql:column() i stedet for sql:variable i XPath-filtrene. Se Binding af relationelle data inde i XML-data .

Og endelig, hvis alt hvad du behøver er at tjekke for eksistens, kan du bruge exist( ) XML-metode:

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


  1. Kan jeg i MySQL returnere slettede rækker efter en sletning?

  2. Hvordan erklærer man postgresql json/jsonb felt med efterfølger?

  3. Sikring af MySQL-server

  4. Laravel/ PHP:Bestil efter alfabetisk med tal i rækkefølge