2016-09-27 92 views
-2

我希望有人能幫助我。我收到包含以下數據的每週xml文檔。我需要在SQL Server中創建一個表來存儲這些數據,並且每週都會用新數據重新加載表。有人可以建議最簡單的方法來完成這件事。非常感謝您的幫助。謝謝。XML數據到SQL Server表

<?xml version="1.0" encoding="UTF-8"?> 
 

 
-<report> 
 

 

 
-<report_header> 
 

 
<c1>PROJECTNUMBER</c1> 
 

 
<c2>PROJECTNAME</c2> 
 

 
<c3>CHART_FIELD</c3> 
 

 
<c4>PROJECT_SATUS</c4> 
 

 
<c5>Anticipated_Final_Cost</c5> 
 

 
<c6>Approved_Budget_AFC</c6> 
 

 
<c7>Budget_Balance</c7> 
 

 
<c8>Change_Order_Requests</c8> 
 

 
<c9>Committed_Pending_Committments</c9> 
 

 
<c10>Committed_to_Date</c10> 
 

 
<c11>Current_Approved_Budget</c11> 
 

 
<c12>Current_CBO_Budget</c12> 
 

 
<c13>Exposure</c13> 
 

 
<c14>Pending_Commitments</c14> 
 

 
<c15>Total_Invoiced</c15> 
 

 
<c16>Total_Paid</c16> 
 

 
</report_header> 
 

 

 
-<report_row> 
 

 
<c1>10001</c1> 
 

 
<c2>334 East 25th Street LL11-98</c2> 
 

 
<c3>SOM01-55-A-86000-NYUPG-100457</c3> 
 

 
<c4>View-Only</c4> 
 

 
<c5>2,010,176.43</c5> 
 

 
<c6>189,823.57</c6> 
 

 
<c7>189,823.57</c7> 
 

 
<c8>0.00</c8> 
 

 
<c9>2,010,176.43</c9> 
 

 
<c10>2,011,762.80</c10> 
 

 
<c11>2,200,000.00</c11> 
 

 
<c12>2,200,000.00</c12> 
 

 
<c13>0.00</c13> 
 

 
<c14>-1,586.37</c14> 
 

 
<c15>2,010,176.93</c15> 
 

 
<c16>2,010,176.93</c16> 
 

 
</report_row> 
 

 

 
-<report_row> 
 

 
<c1>10002</c1> 
 

 
<c2>New BDF - HJD</c2> 
 

 
<c3>HOS01-55-H-86000-NYUPG-100458</c3> 
 

 
<c4>Active</c4> 
 

 
<c5>1,249,096.11</c5> 
 

 
<c6>-429,096.11</c6> 
 

 
<c7>-429,096.11</c7> 
 

 
<c8>0.00</c8> 
 

 
<c9>1,249,096.11</c9> 
 

 
<c10>1,289,648.59</c10> 
 

 
<c11>820,000.00</c11> 
 

 
<c12>820,000.00</c12> 
 

 
<c13>0.00</c13> 
 

 
<c14>-40,552.48</c14> 
 

 
<c15>1,213,091.02</c15> 
 

 
<c16>1,213,091.02</c16> 
 

 
</report_row> 
 

 

 
-<report_row> 
 

 
<c1>10003</c1> 
 

 
<c2>Replace Humidification Systems - OR Day Surgery</c2> 
 

 
<c3>HOS01-55-T-86000-NYUPG-100474</c3> 
 

 
<c4>Active</c4> 
 

 
<c5>1,162,698.70</c5> 
 

 
<c6>337,301.30</c6> 
 

 
<c7>337,301.30</c7> 
 

 
<c8>0.00</c8> 
 

 
<c9>1,162,698.70</c9> 
 

 
<c10>1,153,745.00</c10> 
 

 
<c11>1,500,000.00</c11> 
 

 
<c12>1,500,000.00</c12> 
 

 
<c13>0.00</c13> 
 

 
<c14>8,953.70</c14> 
 

 
<c15>39,610.00</c15> 
 

 
<c16>7,795.00</c16> 
 

 
</report_row>

+0

這個問題是不是解決了嗎?你需要進一步的幫助嗎?請允許我提示一個提示:如果這個問題已經解決,那麼在(最佳)答案的投票櫃檯下面勾選驗收檢查將會非常友善。這將1)標記這個問題已解決2)使追隨者更容易找到最佳的解決方案3)支付點給回答者和4)支付點給你。一旦你自己超過了15分的邊界,你又被要求對貢獻進行投票。這是SO的方式來說聲謝謝。快樂編碼! – Shnugo

回答

0

您的報告是很容易的查詢。 report_header的部分不超過report_row部分的編號列的標題。

您用nodes('/report/report_row')查詢。

重新生成您的十進制數之內XML由於逗號而不直接導出。試着這樣說:

你的XML

DECLARE @xml XML= 
'<?xml version="1.0" encoding="UTF-8"?> 
<report> 
    <report_header> 
    <c1>PROJECTNUMBER</c1> 
    <c2>PROJECTNAME</c2> 
    <c3>CHART_FIELD</c3> 
    <c4>PROJECT_SATUS</c4> 
    <c5>Anticipated_Final_Cost</c5> 
    <c6>Approved_Budget_AFC</c6> 
    <c7>Budget_Balance</c7> 
    <c8>Change_Order_Requests</c8> 
    <c9>Committed_Pending_Committments</c9> 
    <c10>Committed_to_Date</c10> 
    <c11>Current_Approved_Budget</c11> 
    <c12>Current_CBO_Budget</c12> 
    <c13>Exposure</c13> 
    <c14>Pending_Commitments</c14> 
    <c15>Total_Invoiced</c15> 
    <c16>Total_Paid</c16> 
    </report_header> 
    <report_row> 
    <c1>10001</c1> 
    <c2>334 East 25th Street LL11-98</c2> 
    <c3>SOM01-55-A-86000-NYUPG-100457</c3> 
    <c4>View-Only</c4> 
    <c5>2,010,176.43</c5> 
    <c6>189,823.57</c6> 
    <c7>189,823.57</c7> 
    <c8>0.00</c8> 
    <c9>2,010,176.43</c9> 
    <c10>2,011,762.80</c10> 
    <c11>2,200,000.00</c11> 
    <c12>2,200,000.00</c12> 
    <c13>0.00</c13> 
    <c14>-1,586.37</c14> 
    <c15>2,010,176.93</c15> 
    <c16>2,010,176.93</c16> 
    </report_row> 
    <report_row> 
    <c1>10002</c1> 
    <c2>New BDF - HJD</c2> 
    <c3>HOS01-55-H-86000-NYUPG-100458</c3> 
    <c4>Active</c4> 
    <c5>1,249,096.11</c5> 
    <c6>-429,096.11</c6> 
    <c7>-429,096.11</c7> 
    <c8>0.00</c8> 
    <c9>1,249,096.11</c9> 
    <c10>1,289,648.59</c10> 
    <c11>820,000.00</c11> 
    <c12>820,000.00</c12> 
    <c13>0.00</c13> 
    <c14>-40,552.48</c14> 
    <c15>1,213,091.02</c15> 
    <c16>1,213,091.02</c16> 
    </report_row> 
    <report_row> 
    <c1>10003</c1> 
    <c2>Replace Humidification Systems - OR Day Surgery</c2> 
    <c3>HOS01-55-T-86000-NYUPG-100474</c3> 
    <c4>Active</c4> 
    <c5>1,162,698.70</c5> 
    <c6>337,301.30</c6> 
    <c7>337,301.30</c7> 
    <c8>0.00</c8> 
    <c9>1,162,698.70</c9> 
    <c10>1,153,745.00</c10> 
    <c11>1,500,000.00</c11> 
    <c12>1,500,000.00</c12> 
    <c13>0.00</c13> 
    <c14>8,953.70</c14> 
    <c15>39,610.00</c15> 
    <c16>7,795.00</c16> 
    </report_row> 
</report>'; 

--The查詢:

SELECT r.value('c1[1]','int') AS PROJECTNUMBER 
     ,r.value('c2[1]','nvarchar(max)') AS PROJECTNAME 
     ,r.value('c3[1]','nvarchar(max)') AS CHART_FIELD 
     ,r.value('c4[1]','nvarchar(max)') AS PROJECT_SATUS 
     ,CAST(REPLACE(r.value('c5[1]','nvarchar(max)'),',','') AS decimal(14,4)) AS Anticipated_Final_Cost 
     ,CAST(REPLACE(r.value('c6[1]','nvarchar(max)'),',','') AS decimal(14,4)) AS Approved_Budget_AFC 
     ,CAST(REPLACE(r.value('c7[1]','nvarchar(max)'),',','') AS decimal(14,4)) AS Budget_Balance 
     ,CAST(REPLACE(r.value('c8[1]','nvarchar(max)'),',','') AS decimal(14,4)) AS Change_Order_Requests 
     ,CAST(REPLACE(r.value('c9[1]','nvarchar(max)'),',','') AS decimal(14,4)) AS Committed_Pending_Committments 
     ,CAST(REPLACE(r.value('c10[1]','nvarchar(max)'),',','') AS decimal(14,4)) AS Committed_to_Date 
     ,CAST(REPLACE(r.value('c11[1]','nvarchar(max)'),',','') AS decimal(14,4)) AS Current_Approved_Budget 
     ,CAST(REPLACE(r.value('c12[1]','nvarchar(max)'),',','') AS decimal(14,4)) AS Current_CBO_Budget 
     ,CAST(REPLACE(r.value('c13[1]','nvarchar(max)'),',','') AS decimal(14,4)) AS Exposure 
     ,CAST(REPLACE(r.value('c14[1]','nvarchar(max)'),',','') AS decimal(14,4)) AS Pending_Commitments 
     ,CAST(REPLACE(r.value('c15[1]','nvarchar(max)'),',','') AS decimal(14,4)) AS Total_Invoiced 
     ,CAST(REPLACE(r.value('c16[1]','nvarchar(max)'),',','') AS decimal(14,4)) AS Total_Paid 
FROM @xml.nodes('/report/report_row') AS A(r)