Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Não é possível consultar o arquivo XML com OPENXML no SQL


Existem várias falhas:

  • FROM OPENXML está desatualizado e não deve mais ser usado (existem raras exceções)

  • seu XML incluiu um namespace padrão, que deve ser declarado

  • seu XPath está errado:/Return/ReturnData/IRS990ScheduleHIRS990ScheduleH/ deve ser /Return/ReturnData/IRS990ScheduleH/

Mas de qualquer maneira você deve recorrer ao moderno XQuery métodos. Experimente assim:

--Isso lerá o XML em uma variável declarada.

--atenção Seu XML é declarado com utf-8 , isso pode levar a problemas com caracteres especiais...
DECLARE @x xml
SELECT @x = R
FROM OPENROWSET (BULK 'C:\Users\USER\990\Example.xml', SINGLE_BLOB) AS ReturnData(R);

--Esta é a consulta, primeiro declare o(s) namespace(s), depois use .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)