Mysql
 sql >> Datenbank >  >> RDS >> Mysql

XML-Datei kann nicht mit OPENXML in SQL abgefragt werden

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)