2016-09-27 6 views
-2

私は誰かが私を助けることを望んでいます。私は、以下のデータを含む週刊XML文書を受け取ります。このデータを格納するためにSQL Serverにテーブルを作成し、毎週新しいデータでテーブルをリロードする必要があります。誰かがこれを行うための最も簡単な方法をお勧めしますか?あなたの助けが大変ありがとうございます。ありがとう。SQL Serverへの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>

+0

この質問が解決されていますか?さらに助けが必要ですか?私に1つのヒントを許してください:この質問が解決された場合は、(最良の)回答の投票カウンタの下で受け入れ検査をチェックすることは、非常に親切です。これは、1)この問題を解決済みとマークします。2)フォロワーが最良の解決策を見つけるのをより簡単にします。3)回答者にポイントを払います。あなた自身が15ポイントの国境を越えたら、さらにあなたは貢献に投票するように求められます。これは、ありがとうと言います。ハッピーコーディング! – 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)