Pregunta

Estoy buscando una manera de extraer XML de una base de datos SQL y triturar el XML a través de SSIS a granel. Actualmente tengo un paquete que puede extraer XML de la base de datos y pasar el XML a un procedimiento almacenado, a través de una variable, para triturar, pero esto solo funciona 1 registro a la vez. Al procesar 100,000 registros, esto puede llevar mucho tiempo.

Me gustaría destrozar múltiples valores XML a la vez usando SSIS. ¿Es esto posible con SSIS? ¿Quizás algo en una tarea de flujo de datos donde todos los valores XML se seleccionan de una fuente y luego pasan a un analizador de algún tipo?

¿Fue útil?

Solución

Entonces, después de mucha búsqueda y pensamiento en el problema, rediseñé los procedimientos almacenados que hicieron la trituración. En lugar de triturar una variable que se pasa al procedimiento almacenado, acabo de triturarme de la columna XML misma. Esto me permitió destrozar muchos valores XML a la vez en lugar de recorrerlos y pasarlos a un procedimiento almacenado uno a la vez. Esto me dio el impulso de rendimiento que estaba buscando. Entonces, en lugar de algo como esto ...

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)

Ahora hago esto ...

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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top