2016-08-11 59 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