2016-03-01 31 views
0

我正在嘗試基於兩個SQL表中的數據生成XML字符串。一個包含訂單標題數據,另一個包含行項目數據。如何使用SQL PATH模式和行項目生成XML

我的問題是,我不能讓行項目信息出現一個訂單內適當多重元素:

這是SQL語句:

Select 
        LTRIM(RTRIM(H.CustPONbr)) As "Transactions/Transaction/CustomerOrdNumber",    
        (
        Select LTRIM(RTRIM(InvtID)) As "data()" From X888_Amazon_Order_Line L1 
        Where L1.CpnyID = H.CpnyID And L1.CustPONbr = H.CustPONbr 
        FOR XML PATH (''), ELEMENTS 
        ) As "Transactions/Transaction/LineItems/LineItem/InvtId" 

       From X888_Amazon_Order_Header H (nolock) 
       where h.CustPONbr = '99999014' 
       For XML PATH ('ProcessEngineSubmission'), Root ('XML'), ELEMENTS 

這是結果我得到:

<XML> 
    <Transactions> 
     <Transaction> 
     <CustomerOrdNumber>99999014</CustomerOrdNumber> 
     <LineItems> 
      <LineItem> 
      <InvtId>TEST 1235 TEST 1234</InvtId> 
      </LineItem> 
     </LineItems> 
     </Transaction> 
    </Transactions> 
</XML> 

如果我執行內部的選擇(替換「數據()」與InvtId),我得到了我想要實現:

<InvtId>TEST 1235</InvtId> 
<InvtId>TEST 1234</InvtId> 
+0

您正在使用哪些DBMS? –

+0

使用的標記dbms。那裏有一些產品特定的SQL。 – jarlh

回答

2

試試這樣說:

嵌套選擇需要的,TYPE擴展回來爲XML ...

您可能需要在內部PATH('')到指定路徑或給一個名字列爲AS ...

Select LTRIM(RTRIM(H.CustPONbr)) As "Transactions/Transaction/CustomerOrdNumber" 
     ,(
      Select LTRIM(RTRIM(InvtID)) 
      From X888_Amazon_Order_Line L1 
      Where L1.CpnyID = H.CpnyID And L1.CustPONbr = H.CustPONbr 
      FOR XML PATH (''), TYPE 
     ) As "Transactions/Transaction/LineItems/LineItem/InvtId" 

From X888_Amazon_Order_Header H (nolock) 
where h.CustPONbr = '99999014' 
For XML PATH ('ProcessEngineSubmission'), Root ('XML') 
+0

非常感謝!添加'TYPE'擴展名。 –