Query para extraer informacion de un xml

Buen Dia, les comparto un query (SP) que realice para la extracción de información de un xml y después incluirla a una tabla a sql server.

CREATE PROCEDURE [dbo].[SIP_XMLimportXML]
   	@docentry as varchar(100)
   	--@donum as varchar(100)
AS
BEGIN
   
   SET NOCOUNT ON;
DECLARE @Data as XML
DECLARE @xml as XML
DECLARE @ruta AS varchar(100)
DECLARE @RUTA2 AS varchar(200)
DECLARE @NoFol as varchar(200)
DECLARE @XML2 as varchar(1000)
DECLARE @sql as varchar(max)

--SET @ruta='C:\Users\Administrador\AppData\Local\Temp\b1_xmlsource.xml'
SET @NoFol = (SELECT T0.ReportID FROM MiBaseDatos.[dbo].ECM2 T0 WHERE  T0.[SrcObjType]=13 AND T0.[SrcObjAbs]=@docentry)
SET @RUTA2= (select convert(varchar(4),year(t0.DocDate))+'-' + RIGHT('00' + Ltrim(Rtrim(month(t0.DocDate))),2) +'\'+T0.CardCode+'\IN\'
from MiBaseDatos.[dbo].OINV t0 WHERE t0.DocEntry=@docentry)
--Ruta donde estan los XML en el servidor
SET @Ruta = (select convert(varchar(249), XmlPath)+'0010000100\0010000100\'+@RUTA2 from MiBaseDatos.[dbo].OADM)
SET @XML2  = (@Ruta +   @NoFol + '.xml')

DECLARE @SQL_BULK VARCHAR(MAX)
--Tabla creada para guardar el texto del xml y el numero DocEntry de la factura
SELECT @sql = 'insert INTO SBO_SIP_XML_Open_XML (Data,DocEntry) SELECT *,'+@docentry+' FROM OPENROWSET (BULK '''+ @XML2+''', SINGLE_BLOB) AS data'

EXEC sp_sqlexec @sql

SELECT @xml=Data FROM SBO_SIP_XML_Open_XML where docentry=@docentry
--SELECT @xml;
;WITH xmlnamespaces('http://www.sat.gob.mx/cfd/3' AS cfdi
       , 'http://www.w3.org/2001/XMLSchema-instance' AS xsi
       , 'http://www.sat.gob.mx/TimbreFiscalDigital' AS tfd
       , 'http://www.sat.gob.mx/TimbreFiscalDigital' AS schemaLocation)
Insert into Mitablaparaguardarinfo (Folio,FechaTimbrado,NoCertificadoSAT,SelloCFD,
SelloSAT,UUID,Version,UsoCFDI,Rfc) SELECT
Comprobante.value('@Folio','int')'Folio',
Comprobante.value('(/cfdi:Comprobante/cfdi:Complemento/tfd:TimbreFiscalDigital/@FechaTimbrado)[1]','datetime')'FechaTimbrado',
Comprobante.value('(/cfdi:Comprobante/cfdi:Complemento/tfd:TimbreFiscalDigital/@NoCertificadoSAT)[1]','nvarchar(MAX)')'NoCertificadoSAT',
Comprobante.value('@Sello','nvarchar(MAX)')'SelloCFD',
Comprobante.value('(/cfdi:Comprobante/cfdi:Complemento/tfd:TimbreFiscalDigital/@SelloSAT)[1]','nvarchar(MAX)')'SelloSAT',
Comprobante.value('(/cfdi:Comprobante/cfdi:Complemento/tfd:TimbreFiscalDigital/@UUID)[1]','nvarchar(MAX)')'UUID',
Comprobante.value('(/cfdi:Comprobante/cfdi:Complemento/tfd:TimbreFiscalDigital/@Version)[1]','decimal(18, 1)')'Version',
Comprobante.value('(cfdi:Receptor/@UsoCFDI)[1]','nvarchar(MAX)')'UsoCFDI',
Comprobante.value('(cfdi:Emisor/@Rfc)[1]','nvarchar(MAX)') 'Rfc'
FROM @xml.nodes ('/cfdi:Comprobante') t1(Comprobante) 

   END

3 Me gusta

Millones de gracias @kriptonniano por compartir

2 Me gusta

Este tema se cerró automáticamente 30 días después de la última publicación. No se permiten nuevas respuestas.