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

时间:2011-11-18 10:11:55

标签: sql-server xml xquery flwor

我在SQLServer 2008 R2中有以下XML数据

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

我想从root获取一个属性名称列表,并将其作为元素列表输出,如下所示:

<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)}>
')

它不开心。它似乎不像硬编码元素名称那样。

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

2 个答案:

答案 0 :(得分:5)

根据Microsoft

  

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

答案 1 :(得分:0)

尝试computed element constructors

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