Има няколко недостатъка:
-
ОТ OPENXML е остарял и не трябва да се използва повече (съществуват редки изключения)
-
вашият XML включва пространство от имена по подразбиране, което трябва да бъде декларирано
-
вашият XPath е грешен:
/Return/ReturnData/IRS990ScheduleHIRS990ScheduleH/
трябва да бъде/Return/ReturnData/IRS990ScheduleH/
Но така или иначе трябва да се обърнете към модерния XQuery
методи. Опитайте така:
--Това ще прочете XML в декларирана променлива.
--внимание Вашият XML е деклариран с utf-8
, това може да доведе до проблеми със специални знаци...
DECLARE @x xml
SELECT @x = R
FROM OPENROWSET (BULK 'C:\Users\USER\990\Example.xml', SINGLE_BLOB) AS ReturnData(R);
--Това е заявката, първо декларирайте пространството(ята) от имена, след това използвайте .nodes()
и .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)