【问题标题】:Return a calculated element name from a XML FLWOR query从 XML FLWOR 查询返回计算的元素名称
【发布时间】:2011-11-18 10:11:54
【问题描述】:

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

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

不开心。除了硬编码的元素名称之外,它似乎不喜欢任何东西。

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

【问题讨论】:

    标签: sql-server xml xquery flwor


    【解决方案1】:

    根据Microsoft

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

    【讨论】:

      【解决方案2】:

      试试computed element constructors:

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

      【讨论】:

      • 谢谢,但 SQLServer 错误“计算元素和属性构造函数的名称表达式仅支持常量表达式。”
      猜你喜欢
      • 2018-02-15
      • 1970-01-01
      • 2017-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多