Quantcast
Channel: Für Entwickler: SQL Server Forum
Viewing all articles
Browse latest Browse all 1772

SQL Abfrage aus XML-Dateien dauert zu lange.

$
0
0

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.

XML OpenRowSet

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

 



Viewing all articles
Browse latest Browse all 1772


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>