none
XML SQL Server 2005 RRS feed

  • Pergunta

  • Boa Tarde, será que alguem poderia me ajudar?

    Estou tentando recuperar as informções de um XML que está em memória porém não estou conseguindo. Abaixo segue o código que utlizei

    DECLARE

     

    @doc xml

    SELECT
    @doc = '<ApoliceTW xmlns="http://tempuri.org/ApoliceTW.xsd">
    <A5029102_VCR>
    <COD_CIA>1</COD_CIA>
    <NUM_POLIZA>440000285114</NUM_POLIZA>
    <NUM_SPTO>0</NUM_SPTO>
    <NUM_APLI>0</NUM_APLI>
    <NUM_SPTO_APLI>0</NUM_SPTO_APLI>
    <NUM_CUOTA>1</NUM_CUOTA>
    <MCA_CA>N</MCA_CA>
    <MCA_CV>N</MCA_CV>
    <COD_AGT>71503</COD_AGT>
    <MCA_ACTIVO>S</MCA_ACTIVO>
    <FEC_VCTO2_VCR>2008-09-29T00:00:00-03:00</FEC_VCTO2_VCR>
    <IMP_TOTAL2_VCR>2333.17</IMP_TOTAL2_VCR>
    <FEC_VCTO3_VCR>2008-10-09T00:00:00-03:00</FEC_VCTO3_VCR>
    <IMP_TOTAL3_VCR>2461.61</IMP_TOTAL3_VCR>
    <COD_COBRO_VCR>BA</COD_COBRO_VCR>
    <COD_ENTIDAD>0399</COD_ENTIDAD>
    <COD_OFICINA>0454</COD_OFICINA>
    <COD_AUX>0</COD_AUX>
    <FEC_EFEC_RECIBO>2008-09-19T00:00:00-03:00</FEC_EFEC_RECIBO>
    <NUM_CUOTAS>1</NUM_CUOTAS>
    <PCT_IMPUESTO_VCR>7.380</PCT_IMPUESTO_VCR>
    <MCA_PROCESO_VCR>N</MCA_PROCESO_VCR>
    <COD_USR>TRON2000</COD_USR>
    <FEC_ACTU>2008-08-21T00:00:00-03:00</FEC_ACTU>
    <MCA_ATRASO_VCR>N</MCA_ATRASO_VCR>
    </A5029102_VCR>
    </ApoliceTW>'

    DECLARE

     

    @docHandle int

    EXEC sp_xml_preparedocument @docHandle OUTPUT, @doc, '<ROOT xmlns:rootNS="http://tempuri.org/ApoliceTW.xsd"/>'

     

    --Não estou conseguindo recuperar as informações com o código abaixo
    SELECT
    * FROM
    OPENXML(@docHandle, 'ApoliceTW/A5029102_VCR') --'/rootNS:ApoliceTW/A5029102_VCR')
    WITH
    ( A5029102_VCR Varchar(100),
    COD_CIA Varchar(100),
    NUM_POLIZA Varchar(100),
    NUM_SPTO Varchar(100),
    NUM_APLI Varchar(100),
    NUM_SPTO_APLI Varchar(100),
    NUM_CUOTA Varchar(100),
    MCA_CA Varchar(100),
    MCA_CV Varchar(100),
    COD_AGT Varchar(100),
    MCA_ACTIVO Varchar(100),
    FEC_VCTO2_VCR Varchar(100),
    IMP_TOTAL2_VCR Varchar(100),
    FEC_VCTO3_VCR Varchar(100),
    IMP_TOTAL3_VCR Varchar(100),
    COD_COBRO_VCR Varchar(100),
    COD_ENTIDAD Varchar(100),
    COD_OFICINA Varchar(100),
    COD_AUX Varchar(100),
    FEC_EFEC_RECIBO Varchar(100),
    NUM_CUOTAS Varchar(100),
    PCT_IMPUESTO_VCR Varchar(100),
    MCA_PROCESO_VCR Varchar(100),
    COD_USR Varchar(100),
    FEC_ACTU Varchar(100),
    MCA_ATRASO_VCR Varchar(100)
    )

    Desde já muito obrigado!

    segunda-feira, 1 de junho de 2009 19:59

Respostas

  • Boa Noite,

    Algumas vezes o NameSpace pode facilitar a elaboração do XML, mas algumas vezes...
    Tente algo como a alternativa abaixo:

    --SET @doc = '<ApoliceTW xmlns="http://tempuri.org/ApoliceTW.xsd">
    DECLARE @doc xml
    SET @doc = '<ApoliceTW xmlns="http://tempuri.org/ApoliceTW.xsd">
    <A5029102_VCR>
    <COD_CIA>1</COD_CIA>
    <NUM_POLIZA>440000285114</NUM_POLIZA>
    <NUM_SPTO>0</NUM_SPTO>
    <NUM_APLI>0</NUM_APLI>
    <NUM_SPTO_APLI>0</NUM_SPTO_APLI>
    <NUM_CUOTA>1</NUM_CUOTA>
    <MCA_CA>N</MCA_CA>
    <MCA_CV>N</MCA_CV>
    <COD_AGT>71503</COD_AGT>
    <MCA_ACTIVO>S</MCA_ACTIVO>
    <FEC_VCTO2_VCR>2008-09-29T00:00:00-03:00</FEC_VCTO2_VCR>
    <IMP_TOTAL2_VCR>2333.17</IMP_TOTAL2_VCR>
    <FEC_VCTO3_VCR>2008-10-09T00:00:00-03:00</FEC_VCTO3_VCR>
    <IMP_TOTAL3_VCR>2461.61</IMP_TOTAL3_VCR>
    <COD_COBRO_VCR>BA</COD_COBRO_VCR>
    <COD_ENTIDAD>0399</COD_ENTIDAD>
    <COD_OFICINA>0454</COD_OFICINA>
    <COD_AUX>0</COD_AUX>
    <FEC_EFEC_RECIBO>2008-09-19T00:00:00-03:00</FEC_EFEC_RECIBO>
    <NUM_CUOTAS>1</NUM_CUOTAS>
    <PCT_IMPUESTO_VCR>7.380</PCT_IMPUESTO_VCR>
    <MCA_PROCESO_VCR>N</MCA_PROCESO_VCR>
    <COD_USR>TRON2000</COD_USR>
    <FEC_ACTU>2008-08-21T00:00:00-03:00</FEC_ACTU>
    <MCA_ATRASO_VCR>N</MCA_ATRASO_VCR>
    </A5029102_VCR>
    </ApoliceTW>'
    
    SELECT
    	Apolice.A.value('
    		declare namespace x="http://tempuri.org/ApoliceTW.xsd";
    		(./x:COD_CIA)[1]','smallint') As COD_CIA,
    	Apolice.A.value('
    		declare namespace x="http://tempuri.org/ApoliceTW.xsd";
    		(./x:NUM_POLIZA)[1]','char(12)') As NUM_POLIZA,
    	Apolice.A.value('
    		declare namespace x="http://tempuri.org/ApoliceTW.xsd";
    		(./x:NUM_SPTO)[1]','smallint') As NUM_SPTO
    FROM @doc.nodes('
    	declare namespace x="http://tempuri.org/ApoliceTW.xsd";
    	/x:ApoliceTW/x:A5029102_VCR') Apolice(A)

    Sou suspeito para falar, mas os artigos do Plugmasters podem realmente ajudá-lo muito.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Usando o SSIS para importar várias planilhas de um mesmo arquivo Excel para o SQL Server
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!591.entry
    Classifique as respostas. O seu feedback é imprescindível
    • Marcado como Resposta Everton Lima sexta-feira, 17 de julho de 2009 00:28
    sexta-feira, 5 de junho de 2009 02:57
  • Marcelo a melhor solução realmente foi a de retirar o XMLNS, obrigado pela ajuda!

    []s,
    Everton.

    • Marcado como Resposta Everton Lima sexta-feira, 17 de julho de 2009 00:27
    segunda-feira, 8 de junho de 2009 12:15

Todas as Respostas

  • Everton,


    Mas qual é a mensagem de erro?


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 2 de junho de 2009 17:52
  • Junior,

    a execução desse script não retorna nenhum erro. A query que utilizo a com a funcão OPENXML não esta me retornando nada (nenhum registro).

    terça-feira, 2 de junho de 2009 22:01
  • Everton,

    Quem monta este XML?
    remove o XMLNS
    Abaixo uso o XQUERY, de uma pesquisada no BOL

    DECLARE @x xml
    SET @x = '<ApoliceTW>
    <A5029102_VCR>
    <COD_CIA>1</COD_CIA>
    <NUM_POLIZA>440000285114</NUM_POLIZA>
    <NUM_SPTO>0</NUM_SPTO>
    <NUM_APLI>0</NUM_APLI>
    <NUM_SPTO_APLI>0</NUM_SPTO_APLI>
    <NUM_CUOTA>1</NUM_CUOTA>
    <MCA_CA>N</MCA_CA>
    <MCA_CV>N</MCA_CV>
    <COD_AGT>71503</COD_AGT>
    <MCA_ACTIVO>S</MCA_ACTIVO>
    <FEC_VCTO2_VCR>2008-09-29T00:00:00-03:00</FEC_VCTO2_VCR>
    <IMP_TOTAL2_VCR>2333.17</IMP_TOTAL2_VCR>
    <FEC_VCTO3_VCR>2008-10-09T00:00:00-03:00</FEC_VCTO3_VCR>
    <IMP_TOTAL3_VCR>2461.61</IMP_TOTAL3_VCR>
    <COD_COBRO_VCR>BA</COD_COBRO_VCR>
    <COD_ENTIDAD>0399</COD_ENTIDAD>
    <COD_OFICINA>0454</COD_OFICINA>
    <COD_AUX>0</COD_AUX>
    <FEC_EFEC_RECIBO>2008-09-19T00:00:00-03:00</FEC_EFEC_RECIBO>
    <NUM_CUOTAS>1</NUM_CUOTAS>
    <PCT_IMPUESTO_VCR>7.380</PCT_IMPUESTO_VCR>
    <MCA_PROCESO_VCR>N</MCA_PROCESO_VCR>
    <COD_USR>TRON2000</COD_USR>
    <FEC_ACTU>2008-08-21T00:00:00-03:00</FEC_ACTU>
    <MCA_ATRASO_VCR>N</MCA_ATRASO_VCR>
    </A5029102_VCR>
    </ApoliceTW>'
    
    SELECT @x.query('/ApoliceTW/A5029102_VCR/*')
    
    


    Att.
    Marcelo Fernandes
    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    quarta-feira, 3 de junho de 2009 12:15
  • Amigo
    Tambem enfretei o mesmo problema
    solução que encontrei
    Remover o namespace do arquivo xml
    utilizar xquery para  obter os dados
    segue abaixo link com ducumentação do xquery bem como alguns macetes para trabalhar com arquivo xml no sql server 2005
    espero ter ajudado
    http://www.plugmasters.com.br/sys/materias/773/8/SQL-Server-2005-New-Features:-Os-m%E9todos-XML---Parte-1
    http://www.plugmasters.com.br/sys/materias/799/1/SQL-Server-2005-New-Features%3A-Os-m%E9todos-XML---Parte-2
    quarta-feira, 3 de junho de 2009 17:15
  • Se sua versão for sql 2005, acho que é bem melhor trabalhar com o XQUERY como comente e o amigo Leonardo.

    Att,
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    quarta-feira, 3 de junho de 2009 18:26
  • Marcelo,

    Concordo com você!!!

     


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quinta-feira, 4 de junho de 2009 12:35
  • Boa Noite,

    Algumas vezes o NameSpace pode facilitar a elaboração do XML, mas algumas vezes...
    Tente algo como a alternativa abaixo:

    --SET @doc = '<ApoliceTW xmlns="http://tempuri.org/ApoliceTW.xsd">
    DECLARE @doc xml
    SET @doc = '<ApoliceTW xmlns="http://tempuri.org/ApoliceTW.xsd">
    <A5029102_VCR>
    <COD_CIA>1</COD_CIA>
    <NUM_POLIZA>440000285114</NUM_POLIZA>
    <NUM_SPTO>0</NUM_SPTO>
    <NUM_APLI>0</NUM_APLI>
    <NUM_SPTO_APLI>0</NUM_SPTO_APLI>
    <NUM_CUOTA>1</NUM_CUOTA>
    <MCA_CA>N</MCA_CA>
    <MCA_CV>N</MCA_CV>
    <COD_AGT>71503</COD_AGT>
    <MCA_ACTIVO>S</MCA_ACTIVO>
    <FEC_VCTO2_VCR>2008-09-29T00:00:00-03:00</FEC_VCTO2_VCR>
    <IMP_TOTAL2_VCR>2333.17</IMP_TOTAL2_VCR>
    <FEC_VCTO3_VCR>2008-10-09T00:00:00-03:00</FEC_VCTO3_VCR>
    <IMP_TOTAL3_VCR>2461.61</IMP_TOTAL3_VCR>
    <COD_COBRO_VCR>BA</COD_COBRO_VCR>
    <COD_ENTIDAD>0399</COD_ENTIDAD>
    <COD_OFICINA>0454</COD_OFICINA>
    <COD_AUX>0</COD_AUX>
    <FEC_EFEC_RECIBO>2008-09-19T00:00:00-03:00</FEC_EFEC_RECIBO>
    <NUM_CUOTAS>1</NUM_CUOTAS>
    <PCT_IMPUESTO_VCR>7.380</PCT_IMPUESTO_VCR>
    <MCA_PROCESO_VCR>N</MCA_PROCESO_VCR>
    <COD_USR>TRON2000</COD_USR>
    <FEC_ACTU>2008-08-21T00:00:00-03:00</FEC_ACTU>
    <MCA_ATRASO_VCR>N</MCA_ATRASO_VCR>
    </A5029102_VCR>
    </ApoliceTW>'
    
    SELECT
    	Apolice.A.value('
    		declare namespace x="http://tempuri.org/ApoliceTW.xsd";
    		(./x:COD_CIA)[1]','smallint') As COD_CIA,
    	Apolice.A.value('
    		declare namespace x="http://tempuri.org/ApoliceTW.xsd";
    		(./x:NUM_POLIZA)[1]','char(12)') As NUM_POLIZA,
    	Apolice.A.value('
    		declare namespace x="http://tempuri.org/ApoliceTW.xsd";
    		(./x:NUM_SPTO)[1]','smallint') As NUM_SPTO
    FROM @doc.nodes('
    	declare namespace x="http://tempuri.org/ApoliceTW.xsd";
    	/x:ApoliceTW/x:A5029102_VCR') Apolice(A)

    Sou suspeito para falar, mas os artigos do Plugmasters podem realmente ajudá-lo muito.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Usando o SSIS para importar várias planilhas de um mesmo arquivo Excel para o SQL Server
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!591.entry
    Classifique as respostas. O seu feedback é imprescindível
    • Marcado como Resposta Everton Lima sexta-feira, 17 de julho de 2009 00:28
    sexta-feira, 5 de junho de 2009 02:57
  • Marcelo a melhor solução realmente foi a de retirar o XMLNS, obrigado pela ajuda!

    []s,
    Everton.

    • Marcado como Resposta Everton Lima sexta-feira, 17 de julho de 2009 00:27
    segunda-feira, 8 de junho de 2009 12:15
  • Leonardo,

      Inicialmente já estva utilizando o Xquery mas como não conseguia progredir resolvi tentar outra coisa...rs... bom retirei o XMLNS e funcionou, obrigado pela ajuda!

    []s,
    Everton.

    segunda-feira, 8 de junho de 2009 12:18
  • Marcelo,

      Inicialmente já estva utilizando o Xquery mas como não conseguia progredir resolvi tentar outra coisa...rs... bom retirei o XMLNS e funcionou, obrigado pela ajuda!

    []s,
    Everton.

    segunda-feira, 8 de junho de 2009 12:20
  • Obrigado pelo retorno,

    se possivel marque como resposta.
    Att.
    Marcelo Fernandes
    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    segunda-feira, 8 de junho de 2009 13:45