Trabalhando com Campo XML

14 views
Skip to first unread message

Igor Alves

unread,
Aug 6, 2013, 2:48:43 PM8/6/13
to sql-serv...@googlegroups.com
Tenho na tabela de Documento um campo XML, onde o XML está armazenado na seguinte forma:

<controle>
  <retornoCotacao>
    <statuscondicaocontratual>58</statuscondicaocontratual>
    <veiculos>
      <veiculo>
        <sequenciaveiculo>1</sequenciaveiculo>
        <textosimpressaoitem>
          <blococlausulafipe>
            <clausulafipe>Y</clausulafipe>
          </blococlausulafipe>
        </textosimpressaoitem>
      </veiculo>
      <veiculo>
        <sequenciaveiculo>2</sequenciaveiculo>
        <textosimpressaoitem>
          <blococlausulafipe>
            <clausulafipe>XY</clausulafipe>
          </blococlausulafipe>
            <automensal>SEGURO AUTO MENSAL: Mensalidade inicial de R$ 8.599,53.</automensal>
            <automensal>* Seguro em 12 parcelas sem juros, ajustado conforme variação de preço de seu veículo no mercado. (Tabela FIPE)</automensal>
            <automensal>* Opção de pagamento através de fatura ou débito automático.</automensal>
            <automensal>* Renovação automática, sem burocracia.</automensal>
          </blocoautomensal>
        </textosimpressaoitem>
      </veiculo>
        <sequenciaveiculo>8</sequenciaveiculo>
        <codigocategoriaveiculo>61</codigocategoriaveiculo>
        <codigocategoriaveiculouso>61</codigocategoriaveiculouso>
        <codigocategoriarcf>52</codigocategoriarcf>
        <codigocategoriarcfespecial>52</codigocategoriarcfespecial>
        <codigodispositivomaiordesconto>0</codigodispositivomaiordesconto>
        <codigodispositivocomodato>0</codigodispositivocomodato>
        <codigofipe>0</codigofipe>
        <codigoplanoreparoparabrisa>0</codigoplanoreparoparabrisa>
        <codigoregiaotarifacao>28</codigoregiaotarifacao>
        <codigosnormas>100;101;102;108</codigosnormas>
        <operacaoespecial>0</operacaoespecial>
        <rastreadorcomodatoobrigatorio />
        <perfilcalculo>0</perfilcalculo>
        <rastreadorinstalado>N</rastreadorinstalado>
        <anovigenciaexsegurado>0</anovigenciaexsegurado>
        <numeropassageiros>0</numeropassageiros>
        <percentualbonus>0,00</percentualbonus>
        <percentualdescontofidelidade>0,00</percentualdescontofidelidade>
        <percentualdescontolimitadorrcf>0</percentualdescontolimitadorrcf>
        <percentualfatorauto>0,00</percentualfatorauto>
        <premioliquido>2174,48</premioliquido>
        <premioliquidomensal>0,00</premioliquidomensal>
        <mesescoberturaveiculonovo>0</mesescoberturaveiculonovo>
        <tipocondutoreventual>0</tipocondutoreventual>
        <tipocoberturainterna>1</tipocoberturainterna>
        <tipofranquia>1</tipofranquia>
        <tipogrupoopcional>0</tipogrupoopcional>
        <valordescontoconvencional>0,00</valordescontoconvencional>
        <valordescontomensal>0,00</valordescontomensal>
        <franquiafaroisconvencional>0,00</franquiafaroisconvencional>
        <franquiafaroismensal>0,00</franquiafaroismensal>
        <importanciaseguradadepreciada>55000,00</importanciaseguradadepreciada>
        <importanciaseguradafipe>0,00</importanciaseguradafipe>
        <percentualfipedepreciado>0,00</percentualfipedepreciado>
        <rastreadorcomodatoinstalado />
        <codigomarcatipo>046-002</codigomarcatipo>
        <travamultlock>N</travamultlock>
        <percentualdescontolimitador>0,9325</percentualdescontolimitador>
        <numeronotafiscal>0</numeronotafiscal>
        <coberturas>
          <cobertura>
            <codigosubproduto>1</codigosubproduto>
            <codigocobertura>20000</codigocobertura>
            <taxa>0,00</taxa>
            <valorpremio>2174,48</valorpremio>
            <descricaofranquia>3.569,50</descricaofranquia>
            <descricaoimportanciasegurada>0,00</descricaoimportanciasegurada>
            <valorfranquia>3569,50</valorfranquia>
            <percentualdescontototal>0,00</percentualdescontototal>
            <premioanual>2174,48</premioanual>
            <valorimportanciasegurada>0,00</valorimportanciasegurada>
            <codigoplano>0</codigoplano>
          </cobertura>
          <cobertura>
            <codigosubproduto>1</codigosubproduto>
            <codigocobertura>20001</codigocobertura>
            <taxa>3,95</taxa>
            <valorpremio>2174,48</valorpremio>
            <descricaofranquia>3.569,50</descricaofranquia>
            <descricaoimportanciasegurada>55.000,00</descricaoimportanciasegurada>
            <valorfranquia>3569,50</valorfranquia>
            <percentualdescontototal>0,00</percentualdescontototal>
            <premioanual>2174,48</premioanual>
            <valorimportanciasegurada>55000,00</valorimportanciasegurada>
            <codigoplano>0</codigoplano>
          </cobertura>
        </coberturas>
        <normas>
          <norma>
            <numeronorma>100</numeronorma>
            <descricaonorma>Veículos protótipos, com liminares, de consulados, embaixadas ou com restrições judiciais: Sem aceitação.</descricaonorma>
          </norma>
          <norma>
            <numeronorma>101</numeronorma>
            <descricaonorma>Veículos de todas as categorias, especiais, transformados e adaptados (inclusive alteração de motor).
Aceitação condicionada a uma eventual indenização com base nas características originais do veículo.
O critério de avaliação do veículo, para efeito de cobrança de prêmio, será baseado na mesma condição. O segurado deverá encaminhar anexa à proposta uma declaração concordando com o critério.
Necessário Vistoria Prévia, exceto renovações Marítima.</descricaonorma>
          </norma>
          <norma>
            <numeronorma>102</numeronorma>
            <descricaonorma>Veículo original: Conforme veículo informado.</descricaonorma>
          </norma>
          <norma>
            <numeronorma>108</numeronorma>
            <descricaonorma>Necessária vistoria prévia, se houver alteração do veículo.</descricaonorma>
          </norma>
        </normas>
        <textosimpressaoitem>
          <blocoanexoitens>
            <anexoitens>&gt;&gt; SE VIGÊNCIA, COBERTURA OU VEÍCULO DIFERENTES, OU SE HOUVER AMPLIAÇÃO/INCLUSÃO DE COBERTURAS, NECESSÁRIA VISTORIA PRÉVIA.</anexoitens>
          </blocoanexoitens>
          <blococlausulafipe>
            <clausulafipe>SEGURO CASCO COM VALOR DETERMINADO</clausulafipe>
          </blococlausulafipe>
          <blococlausula1>
            <clausula1>Não deve ser realizada vistoria, exceto se solicitada posteriormente pela Seguradora.</clausula1>
            <clausula1>Auto Mensal: sem aceitação.</clausula1>
          </blococlausula1>
          <blococlausula2>
            <clausula2>Veículo original</clausula2>
          </blococlausula2>
          <blocotextositens>
            <textositens>NORMAS DE ACEITAÇÃO: 100;101;102;108%CODIGOAUTORIZACAO%</textositens>
            <textositens>Tipo de mercadoria transportada: OUTROS.</textositens>
            <textositens>LR.C: 6,75</textositens>
            <textositens>Valor informado para o cálculo será confirmado por ocasião da emissão da apólice</textositens>
          </blocotextositens>
          <blocoautomensal>
            <automensal>SEGURO AUTO MENSAL: Mensalidade inicial de R$ 8.599,53.</automensal>
            <automensal>* Seguro em 12 parcelas sem juros, ajustado conforme variação de preço de seu veículo no mercado. (Tabela FIPE)</automensal>
            <automensal>* Opção de pagamento através de fatura ou débito automático.</automensal>
            <automensal>* Renovação automática, sem burocracia.</automensal>
          </blocoautomensal>
        </textosimpressaoitem>
      </veiculo>
    </veiculos>
  </retornoCotacao>
</controle>


Ao realizar a seguinte consulta:
SELECT distinct
   V.C.value('sequenciaveiculo[1]', 'INT') sequenciaveiculo
   ,N.C.value('clausulafipe[1]', 'varchar(200)') clausulafipe
   
FROM
DOCUMENTO doc with(nolock)
CROSS APPLY doc.XML.nodes('//controle/retornoCotacao/veiculos/veiculo') V(C)
CROSS APPLY Seg.DS_XML.nodes('//controle/retornoCotacao/veiculos/veiculo/textosimpressaoitem/blococlausulafipe') N(C)
where
ID = 1

ele retorna:
Sequencia: 1 clausula fipe:Y
Sequencia: 1 clausula fipe:XY

Sequencia: 2 clausula fipe:Y
Sequencia: 2 clausula fipe:XY

Como faço para retornar corretamente:
Sequencia: 1 clausula fipe:Y
Sequencia: 2 clausula fipe:XY

Alguém poderia me auxiliar?

Igor Alves
Reply all
Reply to author
Forward
0 new messages