使用SSIS从DB中分解XML

时间:2011-06-10 16:33:33

标签: sql xml ssis bulk shred

我正在寻找一种从SQL数据库中提取XML并通过SSIS批量分解XML的方法。我目前有一个包可以从数据库中提取XML并通过变量将XML传递给存储过程进行粉碎,但这一次只能处理1条记录。处理100,000条记录时,这可能会非常耗时。

我想使用SSIS一次粉碎多个XML值。这可能与SSIS有关吗?也许是数据流任务中的某些东西,其中从源中选择所有XML值然后传递给某种解析器?

1 个答案:

答案 0 :(得分: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)