SELECT in an XML Field

Asked

Viewed 283 times

1

I’m having trouble retrieving the value of an xml node from a field and need help...

The structure of the table is:

--Table Pessoa
   Id int 
   Nome varchar(max)
   DtNascimento date
   Xml_Detalhes XML

my xml is like this:

(1) - Registro de um dos exemplos
<incluir_pessoa xmlns="..." xmlns:ds="..." xmlns:xsi="..." xsi:schemaLocation="...">
    <pessoa>
        <detalhes>
            <nome>FULANO BETA</nome>
            <data_nascimento>1991-11-07</data_nascimento>
        <detalhes>
    <pessoa>
</incluir_pessoa>

(2) - Registro de um dos exemplos
<incluir_pessoa xmlns="..." xmlns:ds="..." xmlns:xsi="..." xsi:schemaLocation="...">
    <pessoa>
        <detalhes>
            <nome>CICLANO CUNHA</nome>
            <data_nascimento>1991-02-20</data_nascimento>
        <detalhes>
    <pessoa>
</incluir_pessoa>

And my query is like this:

SELECT
    P.Id,
    P.DtNascimento,
    P.Xml_Detalhes,
    d.n.value('(nome)[1]','varchar(max)') as NomeXML
FROM 
    Pessoa P
OUTER APPLY
    C.consumoXmlEnvio.nodes('/incluir_pessoa/pessoa/detalhes') as d(n)

and the return comes as:

Id   | Nome    |  DtNascimento  |  Xml               | NomeXML
1    | Fulano  |   1991-11-07   | <incluir_pessoa... | NULL
2    | Ciclano |   1993-02-20   | <incluir_pessoa... | NULL

and should come as:

Id   | Nome    |  DtNascimento  |  Xml               | NomeXML
1    | Fulano  |   1991-11-07   | <incluir_pessoa... | FULANO BETA
2    | Ciclano |   1993-02-20   | <incluir_pessoa... | CICLANO CUNHA

how to return the xml name?

1 answer

1


Here in the company they passed me the solution. It was necessary to define a namespace for the search.

Then the query was like this:

SELECT
    P.Id,
    P.DtNascimento,
    P.Xml_Detalhes,    
    d.n.value('declare default element namespace "http://../incluir_pessoa.xsd"; (/incluir_pessoa/pessoa/detalhes/nome)[1]','varchar(70)') as NomeXML
FROM 
    Pessoa P
  • could mark your reply as accepted?

Browser other questions tagged

You are not signed in. Login or sign up in order to post.