Измельчение XML из БД с использованием служб SSIS - PullRequest
1 голос
/ 10 июня 2011

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

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

1 Ответ

2 голосов
/ 15 июля 2011

Так что после долгих поисков и обдумывания проблемы я переработал хранимые процедуры, которые выполняли измельчение.Вместо того, чтобы уничтожать переменную, передаваемую в хранимую процедуру, я просто уничтожил сам столбец 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)
...