Frage

Ich suche nach einer Möglichkeit, XML aus einer SQL -Datenbank zu ziehen und die XML über SSIS in Schüttung zu zerkleinern. Ich habe derzeit ein Paket, das XML aus der Datenbank ziehen und das XML über eine Variable zum Slredding an eine gespeicherte Prozedur übergeben kann. Dies funktioniert jedoch nur 1 Datensatz. Bei der Bearbeitung von 100.000 Datensätzen kann dies ziemlich zeitaufwändig werden.

Ich möchte mehrere XML -Werte gleichzeitig mit SSIS zerkleinern. Ist das mit SSIS möglich? Vielleicht etwas in einer Datenflussaufgabe, bei der alle XML -Werte aus einer Quelle ausgewählt werden und dann an einen Parser übergeben werden?

War es hilfreich?

Lösung

Nachdem ich viel gesucht und über das Problem nachgedacht hatte, habe ich die gespeicherten Verfahren neu gestaltet, die das Shredding durchgeführt haben. Anstatt eine Variable zu zerkleinern, die in das gespeicherte Verfahren übergeben wird, habe ich nur aus der XML -Säule selbst zerrissen. Dies ermöglichte es mir, viele XML -Werte gleichzeitig zu zerkleinern, anstatt sie einzeln an eine gespeicherte Prozedur weiterzugeben. Dies gab mir den Performance -Schub, den ich suchte. Also statt so etwas ...

SET @xmlData = CAST(@xmlMessageData AS XML)

SELECT
   , row.value('xmlNode1[1]', 'BIT' )                   AS Column1  
   , row.value('xmlNode2[1]', 'NVARCHAR(255)')          AS Column2
   , row.value('xmlNode3[1]', 'BIT' )                   AS Column3
   , row.value('xmlNode4[1]/Name[1]', 'NVARCHAR(255)' ) AS Column4
FROM @xmlData.nodes('xmlRootNode') AS T1(row)

Ich mache das jetzt ...

SELECT
   , row.value('xmlNode1[1]', 'BIT' )                   AS Column1  
   , row.value('xmlNode2[1]', 'NVARCHAR(255)')          AS Column2
   , row.value('xmlNode3[1]', 'BIT' )                   AS Column3
   , row.value('xmlNode4[1]/Name[1]', 'NVARCHAR(255)' ) AS Column4
FROM [ESBMessagesData] D
CROSS APPLY
    [DataItem].nodes('xmlRootNode') AS T1(row)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top