sql >> Base de Datos >  >> RDS >> Mysql

No se puede consultar el archivo XML con OPENXML en SQL

Hay varios defectos:

  • FROM OPENXML está desactualizado y no debe usarse más (existen raras excepciones)

  • su XML incluía un espacio de nombres predeterminado, que debe declararse

  • su XPath es incorrecto:/Return/ReturnData/IRS990ScheduleHIRS990ScheduleH/ debe ser /Return/ReturnData/IRS990ScheduleH/

Pero de todos modos, deberías recurrir a XQuery moderno métodos. Pruébalo así:

--Esto leerá el XML en una variable declarada.

--atención Su XML se declara con utf-8 , esto podría ocasionar problemas con los caracteres especiales...

DECLARE @x xml
SELECT @x = R
FROM OPENROWSET (BULK 'C:\Users\USER\990\Example.xml', SINGLE_BLOB) AS ReturnData(R);

--Esta es la consulta, primero declare los espacios de nombres, luego use .nodes() y .value() :

WITH XMLNAMESPACES(DEFAULT 'http://www.irs.gov/efile'
                          ,'http://www.w3.org/2001/XMLSchema-instance' AS xsi)
SELECT ct.value('(FinancialAssistancePolicyInd)[1]','int') AS FinancialAssistancePolicyInd
      ,ct.value('(FPGReferenceDiscountedCareInd)[1]','int') AS FPGReferenceDiscountedCareInd
      ,ct.value('(FinancialAssistanceAtCostTyp/PersonsServedCnt)[1]','int') AS PersonsServedCnt
      ,ct.value('(FinancialAssistanceAtCostTyp/NetCommunityBenefitExpnsAmt)[1]','int') AS NetCommunityBenefitExpnsAmt
FROM @x.nodes('/Return/ReturnData/IRS990ScheduleH') AS A(ct)