Precisei importar um arquivo XML para o SQL Server, pesquisei em diversos sites, blogs e cheguei ao seguinte…
Vou colocar um exemplo e citar algumas dificuldades que tive:

arquivo: AAS.xml (exemplo do arquivo XML)

<nfeProc xmlns=”http://www.portalfiscal.inf.br/nfe” versao=”2.00″>
<NFe xmlns=”http://www.portalfiscal.inf.br/nfe“>
<infNFe versao=”2.00″ Id=”NFe99999999999999999999998822TESTE”>
<ide>
<cUF>23</cUF>
<cNF>00001111</cNF>
</ide>
<emit>
<CNPJ>1231111111111</CNPJ>
<enderEmit>
<xLgr>AV 13 DE MAIO</xLgr>
<nro>0</nro>
<xBairro>FATIMA</xBairro>
</enderEmit>
</emit>
</infNFe>
</NFe>
</nfeProc>

arquivo: AAS.sql (Consulta utilizada)

DECLARE @XML XML
SET @XML = (
SELECT CAST(BulkColumn AS XML)
FROM OPENROWSET(BULK N’C:\AAS.xml’, SINGLE_BLOB– Informe onde se encontra o arquivo XML
AS Arquivo)

;WITH XMLNAMESPACES(DEFAULT ‘http://www.portalfiscal.inf.br/nfe’) – Este ponto deve ser informado o NAMESPACE (xmlns), senão informar esta linha ele não retorna.
SELECT
NFe.value(‘cUF[1]‘, ‘int’) AS cUF
,      NFe.value(‘cNF[1]‘, ‘int’) AS cNF
,      NFe.value(‘../emit[1]/CNPJ[1]‘,’varchar(20)’) AS CNPJ
,      NFe.value(‘../emit[1]/enderEmit[1]/xLgr[1]‘,’varchar(max)’) AS xLgr
,      NFe.value(‘../emit[1]/enderEmit[1]/nro[1]‘,’varchar(50)’) AS nro
,      NFe.value(‘../emit[1]/enderEmit[1]/xBairro[1]‘,’varchar(max)’) AS xBairro
FROM @XML.nodes(‘//infNFe/ide‘) AS NFes(NFe) – Caminho que ira iniciar a varredura

Resultado:











Alguns Links auxiliares

Como importar arquivos XML para o SQL Server – Parte i
Manipulação de XML
Iniciando com XQUERY – NameSpaces tem Solução
Baixar arquivos utilizados

Boa leitura e espero ter ajudado!


Vejam também:
Gerando XML no SQL Server

Manipulação de XML com SQL Server 2008 R2 (Youtube)

Gerando XML no SQL Server – Arte do FOR XML AUTO

Gerando XML no SQL Server – Arte do FOR XML EXPLICIT

Gerando XML no SQL Server – Arte do FOR XML RAW

Gerando XML no SQL Server – Arte do FOR XML PATH

Iniciando com XQuery – Resumo

Abraço!
Alex Souza
(Blog | Facebook BD)