Sql server 从XML FLWOR查询返回计算出的元素名称

Sql server 从XML FLWOR查询返回计算出的元素名称,sql-server,xml,xquery,flwor,Sql Server,Xml,Xquery,Flwor,我在SQLServer2008R2中有以下XML数据 DECLARE @data XML SET @data = '<root attr1="val1" attr2="val2" attr3="val3"/>' DECLARE@data-XML 设置@data='' 我想从根目录中获取属性名列表,并将其输出为元素列表,如下所示: <root> <attr1>val1</attr1> <attr2>val2</attr2

我在SQLServer2008R2中有以下XML数据

DECLARE @data XML
SET @data = '<root attr1="val1" attr2="val2" attr3="val3"/>'
DECLARE@data-XML
设置@data=''
我想从根目录中获取属性名列表,并将其输出为元素列表,如下所示:

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

瓦尔1
瓦尔2
val3
我一直在玩弄FLWOR查询来获得我想要的。到目前为止,我有:

SELECT @data.query('
for $attr in /*/@*
return <test>{fn:string($attr)}</test>
')
SELECT@data.query('
以美元计/*/@*
返回{fn:string($attr)}
')
这很好,几乎是我所需要的,但当我尝试这样做

SELECT @data.query('
for $attr in /*/@*
return <{fn:local-name($attr)}>{fn:string($attr)}</{fn:local-name($attr)}>
')
SELECT@data.query('
以美元计/*/@*
返回{fn:string($attr)}
')
它不快乐。除了硬编码的元素名之外,它似乎不喜欢任何东西

如何返回具有计算名称的元素?

请尝试:

根据,

现在,我们只支持计算元素和属性构造函数的名称表达式的常量表达式。解决方法是构建动态sql以在属性名称中调用


谢谢,但是SQLServer错误为“计算元素和属性构造函数的名称表达式只支持常量表达式。”
SELECT @data.query('
for $attr in /*/@*
return element {fn:local-name($attr)} {fn:string($attr)}
')