我正在寻找一种从SQL数据库中提取XML并通过SSIS批量分解XML的方法。我目前有一个包可以从数据库中提取XML并通过变量将XML传递给存储过程进行粉碎,但这一次只能处理1条记录。处理100,000条记录时,这可能会非常耗时。
我想使用SSIS一次粉碎多个XML值。这可能与SSIS有关吗?也许是数据流任务中的某些东西,其中从源中选择所有XML值然后传递给某种解析器?
答案 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)