2014-03-05 126 views
0

SQL Server中的XML查詢元素,我得到了下面的XML:沒有孩子

<Node attr1="value1" attr2="value2"> 
    <SubNode SubAttr1="subValue1" subAttr2="subValue2" /> 
</Node> 

我想知道是否有一種方法做一個XQuery表達式只返回<Node>元素。

<Node attr1="value1" attr2="value2"> <Node>

回答

2

對不起,您在這裏找到了一個通用的解決方案 - 如果您必須使用Microsoft SQL Server,它不提供計算的元素構造函數,這些元素的構造函數可以在運行時計算出來(如@dirkk正在使用)。

當你知道這個元素一直被稱爲「節點」,你可以做以下(使用固定的節點名稱):

element Node { /Node/@* } 

如果您還希望包括(直接)文本孩子:

element Node { /Node/@*, /Node/text() } 

如果您需要支持任意元素名稱:您無法在SQL Server中使用XQuery執行此操作。

+0

這就是它,謝謝! – gonferr

0

您可以編寫一個函數來做到這一點:

declare function local:strip-children($e as element()*) as element()* { 
    element {node-name($e)} {$e/@*} 
}; 

local:strip-children(/Node) 

當然,你也可以做到這一點沒有像這樣一個功能:

element {node-name(/node)} {/Node/@*} 

所以只需內聯代碼來自函數。但是,在我看來,函數方法更可重用。

+0

MS SQL Server不支持帶有非常量名稱的計算元素構造函數,這會引發錯誤。 –