2016-08-11 57 views
3

我有一个XML文档,我正在努力构建一个模式以便将这些文档批量加载到SQL Server表中。我注重看起来像这样的XML:创建用于批量加载到SQL Server的XML模式 - 子元素描述父

<Coverage> 
    <CoverageCd>BI</CoverageCd> 
    <CoverageDesc>BI</CoverageDesc> 
    <Limit> 
     <FormatCurrencyAmt> 
      <Amt>30000.00</Amt> 
     </FormatCurrencyAmt> 
     <LimitAppliesToCd>PerPerson</LimitAppliesToCd> 
    </Limit> 
    <Limit> 
     <FormatCurrencyAmt> 
      <Amt>85000.00</Amt> 
     </FormatCurrencyAmt> 
     <LimitAppliesToCd>PerAcc</LimitAppliesToCd> 
    </Limit> 
</Coverage> 
<Coverage> 
    <CoverageCd>PD</CoverageCd> 
    <CoverageDesc>PD</CoverageDesc> 
    <Limit> 
     <FormatCurrencyAmt> 
      <Amt>50000.00</Amt> 
     </FormatCurrencyAmt> 
     <LimitAppliesToCd>Coverage</LimitAppliesToCd> 
    </Limit> 
</Coverage> 

极限的元素中,有一个孩子LimitAppliesToCd,我需要用它来确定,其中金额元素的值实际上被存储在我的表内。这可以使用SQL Server的标准XML批量加载功能吗?通常在XML中我希望元素有一个包含“PerPerson”或“PerAcc”信息的属性,但是我们使用的这个标准并不要求这样。

如果任何人以前使用过ACORD标准,那么您可能会知道我在这里工作的是什么。任何帮助是极大的赞赏。

+0

这个问题是不是解决了吗?你需要进一步的帮助吗?请允许我提一个提示:在最佳答案的投票柜台下面勾选验收检查将是非常好的方法。这将1)标记这个问题已解决2)使追随者更容易找到最佳的解决方案3)支付点给回答者和4)支付点给你。一旦你自己超过了15分的边界,你又被要求对贡献进行投票。这是SO的方式来说声谢谢。快乐编码! – Shnugo

回答

0

不确切地知道你在说什么,但是这是一个从XML中获取信息的解决方案。

假设:你的XML已经批量加载到XML类型的声明的变量@xml

的CTE将拉动信息从XML的。然后最后的查询将使用PIVOT将您的数据放入右列。

有配合表的结构实际插入应该简单...

WITH DerivedTable AS 
(
    SELECT cov.value('CoverageCd[1]','varchar(max)') AS CoverageCd 
      ,cov.value('CoverageDesc[1]','varchar(max)') AS CoverageDesc 
      ,lim.value('(FormatCurrencyAmt/Amt)[1]','decimal(14,4)') AS Amt 
      ,lim.value('LimitAppliesToCd[1]','varchar(max)') AS LimitAppliesToCd 
    FROM @xml.nodes('/root/Coverage') AS A(cov) 
    CROSS APPLY cov.nodes('Limit') AS B(lim) 
) 
SELECT p.* 
FROM 
(SELECT * FROM DerivedTable) AS tbl 
PIVOT 
(
    MIN(Amt) FOR LimitAppliesToCD IN(PerPerson,PerAcc,Coverage) 
) AS p