Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Nie można wysłać zapytania do pliku XML za pomocą OPENXML w SQL

Istnieje kilka wad:

  • FROM OPENXML jest nieaktualny i nie powinien być już używany (istnieją rzadkie wyjątki)

  • Twój XML zawiera domyślną przestrzeń nazw, którą należy zadeklarować

  • Twój XPath jest nieprawidłowy:/Return/ReturnData/IRS990ScheduleHIRS990ScheduleH/ powinno być /Return/ReturnData/IRS990ScheduleH/

Ale i tak powinieneś przejść do nowoczesnego XQuery metody. Wypróbuj to tak:

--To odczyta XML do zadeklarowanej zmiennej.

--uwaga Twój XML jest zadeklarowany za pomocą utf-8 , może to prowadzić do problemów ze znakami specjalnymi...

DECLARE @x xml
SELECT @x = R
FROM OPENROWSET (BULK 'C:\Users\USER\990\Example.xml', SINGLE_BLOB) AS ReturnData(R);

--To jest zapytanie, najpierw zadeklaruj przestrzenie nazw, a następnie użyj .nodes() i .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)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Liczenie wierszy z podzapytania

  2. Wstaw Android Sqlite, jeśli nie istnieje

  3. Dowolny sposób na wyszukiwanie pełnotekstowe w InnoDB

  4. Która z zestawień utf8 jest najlepsza?

  5. MySQL:Dodaj kolumnę sekwencji na podstawie innego pola