2011-06-10 21 views
1

我正在尋找一種方法從SQL數據庫中提取XML,並通過批量的SSIS碎片化XML。我目前有一個包可以從數據庫中提取XML並通過變量將XML傳遞給一個存儲過程進行粉碎,但這一次只能處理一條記錄。處理100,000條記錄時,這可能會非常耗時。使用SSIS從數據庫中分解XML

我想用SSIS一次性分解多個XML值。這可能與SSIS?也許數據流任務中的所有XML值都是從源中選擇的,然後傳遞給某種解析器?

回答

2

因此,經過大量的搜索和思考問題後,我重新設計了粉碎的存儲過程。而不是粉碎正在傳入存儲過程的變量,我只是從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)