Mysql
 sql >> Database >  >> RDS >> Mysql

Impossibile eseguire query sul file XML con OPENXML in SQL

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)