Question

Je cherche un moyen de XML tirer d'une base de données SQL et déchiqueter le XML via SSIS en vrac. J'ai actuellement un package qui peut tirer XML à partir de la base de données et passer le XML à une procédure stockée, par variable pour le broyage, mais cela ne fonctionne que 1 enregistrement à la fois. Lors du traitement de 100.000 dossiers, cela peut devenir beaucoup de temps.

Je voudrais des valeurs XML multiples déchiqueter à la fois en utilisant SSIS. Est-ce possible avec SSIS? Peut-être quelque chose dans une tâche de flux de données où toutes les valeurs XML sont sélectionnés à partir d'une source, puis transmis à un analyseur de quelque sorte?

Était-ce utile?

La solution

Donc, après beaucoup de recherche et de réflexion sur le problème, je repensé les procédures stockées qui ont fait le déchiqueter. Au lieu de déchiqueter une variable qui est passé dans la procédure stockée, je viens déchiqueté de la colonne XML lui-même. Cela m'a permis de déchiqueter beaucoup de valeurs XML à la fois au lieu de boucle et de les passer à une procédure stockée à la fois. Cela m'a donné le coup de pouce de la performance que je cherchais. Ainsi, au lieu de quelque chose comme ça ...

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)

Je fais maintenant ce ...

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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top