SELECT in an XML Field

1

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

The table structure is:

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

My xml looks 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 looks 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?

    
asked by anonymous 03.12.2014 / 14:03

1 answer

1

Here in the company I was given the solution. It was necessary to define a namespace for the search.

Then the query looks 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
    
03.12.2014 / 14:45