Ci sono diversi difetti:
-
FROM OPENXML è obsoleto e non dovrebbe più essere utilizzato (esistono rare eccezioni)
-
il tuo XML includeva uno spazio dei nomi predefinito, che deve essere dichiarato
-
il tuo XPath è sbagliato:
/Return/ReturnData/IRS990ScheduleHIRS990ScheduleH/
dovrebbe essere/Return/ReturnData/IRS990ScheduleH/
Ma comunque dovresti rivolgerti al moderno XQuery
metodi. Prova in questo modo:
--Questo leggerà l'XML in una variabile dichiarata.
--attenzione Il tuo XML è dichiarato con utf-8
, ciò potrebbe causare problemi con i caratteri speciali...
DECLARE @x xml
SELECT @x = R
FROM OPENROWSET (BULK 'C:\Users\USER\990\Example.xml', SINGLE_BLOB) AS ReturnData(R);
--Questa è la query, prima dichiara lo spazio dei nomi, quindi usa .nodes()
e .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)