Answered XML com variável no SQL Server

  • sexta-feira, 17 de agosto de 2012 20:17
     
     

    Preciso criar um loop para ler um XML, usar uma variavel dentro de uma função value, como segue abaixo:

     declare @j int

    SELECT Tab.Col.value('movimentos[1]/trechos[1]/segmento[@i]/de[1]','varchar(50)') AS de FROM @venda.nodes('venda') Tab(Col) 

    Alguem pode me ajudar por gentileza ?

    Obrigado

    Flavio

Todas as Respostas

  • sexta-feira, 17 de agosto de 2012 22:36
    Moderador
     
     Resposta Proposta

    Boa Noite,

    Fácil, fácil. Segue um exemplo:

    declare @xml xml
    set @xml = '<?xml version="1.0"?>
    <Pessoas>
     <Pessoa Cod="1" Nome="Araldino"/>
     <Pessoa Cod="2" Nome="Roberta"/>
     <Pessoa Cod="3" Nome="Sandro"/>
     <Pessoa Cod="4" Nome="Tays"/>
    </Pessoas>'

    declare @codigo int
    set @codigo = 1

    select @xml.value('(/Pessoas/Pessoa[@Cod=sql:variable("@codigo")]/@Nome)[1]','varchar(80)')

    No seu caso, basta adaptar sua XPath. Ex:

    SELECT Tab.Col.value('movimentos[1]/trechos[1]/segmento[sql:variable("@i")]/de[1]','varchar(50)') AS de FROM @venda.nodes('venda') Tab(Col)

    Maiores detalhes sobre XML, sugiro o link abaixo:

    Compêndio de XML – Preparação para o exame 70-433 – MCTS Microsoft SQL Server 2008 – Database Development
    http://gustavomaiaaguiar.wordpress.com/2010/12/17/compendio-de-xml-%E2%80%93-preparacao-para-o-exame-70-433-mcts-microsoft-sql-server-2008-database-development/

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos:http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível

  • segunda-feira, 20 de agosto de 2012 11:41
     
     

    Caro Gustavo,

    No meu caso a minha estrutura nao tem esse @cod dentro da tag, a minha estrutura é essa abaixo, e por isso não funciona, eu preciso fazer um loop nessa tag segmento. Segue a estrutura abaixo:

    <movimento>
    <trecho>
    <segmento>
       <de>a</de>
       <para>b/para>
    </segmento>
    <segmento>
       <de>c</de>
       <para>d</para>
    </segmento>
    <segmento>
       <de>e</de>
       <para>f</para>
    </segmento>
    <segmento>
       <de>g</de>
       <para>h</para>
    </segmento>
    <segmento>
       <de>i</de>
       <para>j</para>
    </segmento>
    </trecho>
    </movimento>

  • segunda-feira, 20 de agosto de 2012 12:33
    Moderador
     
     

    Bom Dia,

    Você poderia mostrar a saída que espera a partir dessa estrutura ?

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos:http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível

  • segunda-feira, 20 de agosto de 2012 14:26
     
     
    Consegui Gustavo .... Obrigado Gustavo....
  • segunda-feira, 20 de agosto de 2012 15:28
    Moderador
     
     Resposta Proposta

    Boa Tarde,

    Não entendi o objetivo da sua XQuery. Tentei resolver com o método nodes que me pareceu mais prático

    select
     t.c.value('de[1]','varchar(20)'),
     t.c.value('para[1]','varchar(20)'),
     t.c.value('datachegada[1]','varchar(20)'),
     t.c.value('datasaida[1]','varchar(20)')
    from @venda.nodes('/venda/movimentos/trechos/segmento') t(c)

    Entretanto, vi que sua XQuery retornou alguns registros que não entendi:

    de para datasaida
    NVT dajldja 17/8/2012
    NVT dajldja 20/8/2012

    Como pode, se no XML, não há registro de NVT, dajldja para o dia 17/08/2012 ?

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos:http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível

  • quarta-feira, 22 de agosto de 2012 02:59
     
     

    Ja resolvi Obrigado Gustavo.....

  • quarta-feira, 22 de agosto de 2012 03:08
    Moderador
     
     Respondido

    Olá Flávio,

    Que bom que pude ajudá-lo. Você poderia marcar a questão como respondida ?

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos:http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível

    • Marcado como Resposta Flavio Climaco quarta-feira, 22 de agosto de 2012 03:33
    •