none
Abrindo blocos XML no SQL SErver 2005 RRS feed

  • Pergunta

  • Galera, boa tarde. Preciso de uma informação.

    Estou iniciando na area de programação , e preciso saber qual o método prático para passar os blocos de um arquivo xml como colunas no SQL.

    Estou construindo uma proc na qual preciso verificar o cnpj de um fornecedor. O XML está nesse formato:

    <NFe xmlns="http://www.portalfiscal...">
      <infNFe Id="IDdaNOTAFISCAL" versao="2.00">
        <ide>
          <cUF>UF</cUF>
          <cNF>99999</cNF>
          <natOp>ENTRADA</natOp>
          <indPag>2</indPag>
          <mod>10</mod>
          <serie>1</serie>
          <nNF>99998</nNF>
          <dEmi>9999-99-99</dEmi>
          <tpNF>1</tpNF>
          <cMunFG>123456</cMunFG>
          <NFref>
            <refNFe>999999999999999998</refNFe>
          </NFref>
          <tpImp>1</tpImp>
          <tpEmis>1</tpEmis>
          <cDV>3</cDV>
          <tpAmb>1</tpAmb>
          <finNFe>1</finNFe>
          <procEmi>0</procEmi>
          <verProc>2.0</verProc>
        </ide>
        <emit>
          <CNPJ>99999999000189</CNPJ>

    Em testes, fiz o seguinte:

    DECLARE @CNPJ xml 
    SET @CNPJ ='<NFe><CNPJ>99999999000199</CNPJ></NFe>' 
    
    SELECT ParamValues.ID.value('.','VARCHAR(20)') as 'Teste' 
    
    FROM @CNPJ.nodes('/NFe') as ParamValues(ID)

    Isso funciona perfeitamente. Porém preciso deixar isso um pouco mais dinamico (usando SELECT). Porém ao executar o código abaixo, o mesmo não me retorna nada...

    declare @CNPJteste xml
    set @CNPJteste = (select CONVERT(xml, ds_xml) from tb_nota_fiscal_eletronica
    where cd_nota_fiscal_eletronica = '99999')
    
    select ParamValues.ID.value('.', 'varchar(20)') as 'Dados do XML'
    FROM @CNPJteste.nodes('/NFe/infNFe/emit') as ParamValues(ID)

    Executando o select de @CNPJteste tenho o xml retornado numa coluna. Mas não consigo chegar ao valor do bloco CNPJ do xml.

    Alguma sugestão? Acredito que seja algo que estou deixando passar em branco...

    Fico no aguardo e agradeço.


    sexta-feira, 22 de fevereiro de 2013 17:56

Respostas