Existuje několik nedostatků:
-
FROM OPENXML je zastaralý a neměl by být nadále používán (existují vzácné výjimky)
-
váš XML obsahoval výchozí jmenný prostor, který musí být deklarován
-
vaše XPath je chybná:
/Return/ReturnData/IRS990ScheduleHIRS990ScheduleH/
by mělo být/Return/ReturnData/IRS990ScheduleH/
Ale každopádně byste se měli obrátit na moderní XQuery
metody. Zkuste to takto:
--To přečte XML do deklarované proměnné.
--pozor Váš XML je deklarován pomocí utf-8
, může to vést k problémům se speciálními znaky...
DECLARE @x xml
SELECT @x = R
FROM OPENROWSET (BULK 'C:\Users\USER\990\Example.xml', SINGLE_BLOB) AS ReturnData(R);
--Toto je dotaz, nejprve deklarujte jmenný prostor(y) a poté použijte .nodes()
a .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)