【问题标题】:Shredding XML from DB using SSIS使用 SSIS 从 DB 中粉碎 XML
【发布时间】:2011-09-12 15:46:39
【问题描述】:

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

我想使用 SSIS 一次分解多个 XML 值。 SSIS可以做到这一点吗?也许在数据流任务中,所有 XML 值都是从源中选择的,然后传递给某种解析器?

【问题讨论】:

    标签: sql xml ssis bulk shred


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      相关资源
      最近更新 更多