Удаление XML из базы данных с помощью SSIS

#sql #xml #ssis #bulk #shred

#sql #xml #ssis #массовое #измельчение

Вопрос:

Я ищу способ извлекать XML из базы данных SQL и массово удалять XML через SSIS. В настоящее время у меня есть пакет, который может извлекать XML из базы данных и передавать XML в хранимую процедуру через переменную для измельчения, но это работает только с 1 записью за раз. При обработке 100 000 записей это может занять довольно много времени.

Я хотел бы удалить сразу несколько значений XML с помощью SSIS. Возможно ли это с помощью SSIS? Возможно, что-то в задаче потока данных, где все значения XML выбираются из источника, а затем передаются какому-либо анализатору?

Ответ №1:

Итак, после долгих поисков и размышлений над проблемой я переработал хранимые процедуры, которые выполняли измельчение. Вместо измельчения переменной, передаваемой в хранимую процедуру, я просто измельчил из самого столбца XML. Это позволило мне удалять сразу много XML-значений вместо зацикливания и передачи их в хранимую процедуру по одному за раз. Это дало мне прирост производительности, который я искал. Итак, вместо чего-то подобного…

 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)
  

Теперь я делаю это…

 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)