2008-11-07 86 views
0

我需要在SQL服務器中編寫一個存儲過程,它的返回數據將用於生成一個XML文件。設計一個存儲過程來創建XML樹

我的XML文件是在

<root> 
<ANode></ANode> 
<BNode></BNode> 
<CNode> 
    <C1Node> 
    <C11Node></C11Node> 
    <C12Node></C12Node> 
    </C1Node> 
    <C2Node> 
    <C21Node></C21Node> 
    <C22Node></C22Node> 
    </C2Node> 
    <C3Node> 
    <C31Node></C31Node> 
    <C32Node></C32Node> 
    </C3Node> 
</CNode> 
</root> 

結構我的問題是,在存儲過程中,我們可以選擇陽極和B節點的值作爲像

Select ANodeVal,BNodeVal from Table 

但如何簡單的SELECT語句設計存儲過程以獲得CNode的記錄,該記錄是除了正常的ANode和BNode之外的每個記錄具有3個或更多(動態)分離節點的子樹。

回答

2

    Nesting XML-returning scalar valued functions

一旦你獲得了嵌套的竅門,並願意寫的構建從下往上的節點段所需的標量值函數的數量(我不會不需要大量的這些鋪設),那麼它不是那麼難。

2

我不會推薦在存儲過程中執行此操作。如果使用C#/ Python或Java等語言創建,將使代碼單元可測試並更易於維護。

0

如果您能夠修改數據庫設計,請考慮將每個節點保留爲記錄而不是列(如樣本選擇語句指出的那樣)。

例如,每一行可能包括以下字段:

  • ROWID
  • ParentRowId
  • 名稱
  • RowData

我假設你正在傳遞數據因爲您指出返回的數據將用於生成XML。在這種情況下,存儲過程只是一條SELECT語句,將格式保留給應用程序。

XML引擎的大多數實現應允許您將子節點添加到現有父節點。 XML被建立在內存中,然後通過任何必要的方法「導出」以獲得期望的最終結果。