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

发布于 2024-12-16 11:00:02 字数 767 浏览 0 评论 0原文

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

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

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

I have the following XML data in SQLServer 2008 R2

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

I would like to get a list of the attribute names from root and output that as a list of elements, like this:

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

I have been playing around with FLWOR queries to get what I want. So far I have this:

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

Which is fine and is almost what I need, but when I try and do this...

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

its not happy. It's doesn't seem to like anything other than a hard coded element name.

How can I return an element with a computed name?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

苍暮颜 2024-12-23 11:00:02

根据微软 ,

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

According to Microsoft,

Right now, we only support constant expressions for the name expression of computed element and attribute constructors. The work around is building dynamic sql to cancat in the attribute name.

忘羡 2024-12-23 11:00:02

尝试计算元素构造函数

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

Try computed element constructors:

SELECT @data.query('
for $attr in /*/@*
return element {fn:local-name($attr)} {fn:string($attr)}
')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文