Hallo,
da wir viele XML-Dateien verarbeiten bzw. auswerten wollen, sollen diese XML-Dateien in einem SQL-Server verarbeitet werden.
Um die Datei zu importieren wird der folgende SQL-Befehl verwendet.
SELECT S.N.value('bpnr[1]','varchar(20)') as bpnr , S.N.value('accountnr[1]','varchar(20)') as accountNr , S.N.value('paymenttarget[1]','varchar(20)') as paymentTarget , S.N.value('meansofpayment[1]','varchar(20)') as meansOfPayment , S.N.value('dealernr[1]','varchar(20)') as dealerNr , S.N.value('paymenttarget_accountingcode[1]','varchar(20)') as paymentTargetAccountingcode , M.N.value('clientsegmentnr[1]','varchar(20)') as clientSegmentnr , S.N.value('dealernr[1]','varchar(20)') as dealerNr , M.N.value('date_of_dayend[1]','varchar(20)') as dateOfDayend from ( SELECT CAST(MY_XML AS xml) as t FROM OPENROWSET(BULK '\\de51977xs10046\mnlog\DWHMN\CROSS\paymentsDataImport\work\DEB20210103.2BH.xml', SINGLE_BLOB) AS t(MY_XML) ) AS t(xmlStr) CROSS APPLY xmlStr.nodes('RecordSet/DataList/customertoaccounting') AS S(N) CROSS APPLY xmlStr.nodes('RecordSet/DistributionHeader') AS M(N)
insoweit funktioniert die Abfrage bei kleineren Datei unter 500 KB einigermaßen gut. (ca. 2 Minuten)
Sollten die Dateien größer werden, ist dieses Verfahren nicht wie hier beschrieben, zu verwenden.
Selbst der Import der XML-DAtei als XML-String in eine Tabelle und die Abfrage mit:
SELECT S.N.value('bpnr[1]','varchar(20)') as bpnr , S.N.value('accountnr[1]','varchar(20)') as accountNr , S.N.value('paymenttarget[1]','varchar(20)') as paymentTarget , S.N.value('meansofpayment[1]','varchar(20)') as meansOfPayment , S.N.value('dealernr[1]','varchar(20)') as dealerNr , S.N.value('paymenttarget_accountingcode[1]','varchar(20)') as paymentTargetAccountingcode , M.N.value('clientsegmentnr[1]','varchar(20)') as clientSegmentnr , S.N.value('dealernr[1]','varchar(20)') as dealerNr , M.N.value('date_of_dayend[1]','varchar(20)') as dateOfDayend From CrossBHXmlImport CROSS APPLY xmlStr.nodes('RecordSet/DataList/customertoaccounting') AS S(N) CROSS APPLY xmlStr.nodes('RecordSet/DistributionHeader') AS M(N) where ID = 1
lief sowohl auf einem SQL-Server 2017 und einem SQL-Server 2014 mehrere Stunden! (> 6 Stunden)
Anscheinend ist dieses Verfahren MS SQL & XML so nicht zu verwenden?
Vielen Dank für Ihre Unterstützung im Voraus.
Wolfgang