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)