2011-11-18 80 views
3

我在SQLServer的下面的XML數據2008 R2從XML FLWOR查詢中返回一個計算元素名稱

DECLARE @data XML 
SET @data = '<root attr1="val1" attr2="val2" attr3="val3"/>' 

我想獲得從根和輸出屬性名稱的列表作爲列表元素,如下:

<root> 
    <attr1>val1</attr1> 
    <attr2>val2</attr2> 
    <attr3>val3</attr3> 
</root> 

我一直在玩FLWOR查詢來獲得我想要的。到目前爲止,我有這樣的:

SELECT @data.query(' 
for $attr in /*/@* 
return <test>{fn:string($attr)}</test> 
') 

這是很好,幾乎是我所需要的,但是當我試圖做到這一點...

SELECT @data.query(' 
for $attr in /*/@* 
return <{fn:local-name($attr)}>{fn:string($attr)}</{fn:local-name($attr)}> 
') 

其不開心。它似乎不像硬編碼元素名稱以外的任何東西。

如何返回帶有計算名稱的元素?

回答

4

Microsoft

現在,我們只支持常量表達式的計算元素的名稱表達和屬性構造。解決方法是在屬性名稱中建立動態sql以cancat。

0

嘗試computed element constructors

SELECT @data.query(' 
for $attr in /*/@* 
return element {fn:local-name($attr)} {fn:string($attr)} 
') 
+0

謝謝,但SQLServer錯誤「只有常量表達式支持計算元素和屬性構造函數的名稱表達式」。 – d4nt