2011-11-18 60 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