Es gibt mehrere Mängel:
-
FROM OPENXML ist veraltet und sollte nicht mehr verwendet werden (es gibt seltene Ausnahmen)
-
Ihr XML enthielt einen Standardnamensraum, der deklariert werden muss
-
Ihr XPath ist falsch:
/Return/ReturnData/IRS990ScheduleHIRS990ScheduleH/
sollte/Return/ReturnData/IRS990ScheduleH/
sein
Aber trotzdem sollten Sie sich dem modernen XQuery
zuwenden Methoden. Versuchen Sie es so:
--Dies liest das XML in eine deklarierte Variable ein.
--Achtung Ihr XML wird mit utf-8
deklariert , dies kann zu Problemen mit Sonderzeichen führen...
DECLARE @x xml
SELECT @x = R
FROM OPENROWSET (BULK 'C:\Users\USER\990\Example.xml', SINGLE_BLOB) AS ReturnData(R);
--Dies ist die Abfrage, deklarieren Sie zuerst den/die Namespace(s), dann verwenden Sie .nodes()
und .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)