gpt4 book ai didi

sql - SQL 服务器中的 FOR XML PATH 和 [text()]

转载 作者:行者123 更新时间:2023-12-02 05:32:54 26 4
gpt4 key购买 nike

我在网上找到了一些文章
url

然后我像这样编码查询并得到相同的结果

但是当我改变 AS [text()][name]
结果包含 XML 标记

像这样

enter image description here

所以我的问题是什么是 [text()]在这段代码中

谢谢你。

最佳答案

其他当前的答案并没有太多解释这是从哪里来的,或者只是提供指向格式错误的网站的链接而没有真正回答问题。

在网络上的许多字符串分组答案中,都有复制粘贴的答案,但没有对发生的事情进行大量解释。我想更好地回答这个问题,因为我想知道同样的事情,并且还深入了解实际发生的事情。

tldr;

简而言之,这是在使用 FOR XML PATH 时帮助转换 XML 输出的语法。它使用列名(或别名)来构建输出。如果您为列命名 text()数据将在根标签内表示为文本。

<row>
My record's data
<row>

在示例中,您可以在网上看到有关如何对字符串进行分组和使用 , 进行连接的示例。使用 for xml 实际上构建具有特定结构(或者更确切地说,缺少结构)的 XML 文件可能并不明显(除了您的查询具有很小的 FOR XML PATH ('') 部分) . ('')正在删除根 xml 标记,并且只是吐出数据。

AS [text()] 的交易

像往常一样, AS用于命名或重命名列别名。在本例中,您将此列别名为 [text()] . [] s 只是 SQL Server 的标准列分隔符,通常不需要,除了今天,因为我们的列名有 () s。这给我们留下了 text()对于我们的列名。

使用列名控制 XML 结构

当您使用时 FOR XML PATH您正在输出一个 XML 文件,并且可以使用您的列名控制结构。可以在此处找到详细的选项列表: https://msdn.microsoft.com/en-us/library/ms189885.aspx

一个示例包括以 @ 符号开头的列名,例如:
SELECT color as '@color', name
FROM #favorite_colors
FOR XML PATH

这会将此列的数据移动到当前 xml 行的属性,而不是其中的项目。你最终得到
<row color="red">
<name>tim</name>
</row>
<row color="blue">
<name>that guy</name>
</row>

那么,回到 [text()] .这实际上是指定一个 XPath Node Test .在 MS Sql Server 的上下文中,您可以了解此名称 here .基本上,它有助于确定我们将此数据添加到的元素类型,例如普通节点(默认)、xml 注释,或者在此示例中,标记中的某些文本。

使用几个 Action 来构建输出的示例
SELECT 
color as [@color]
,'Some info about ' + name AS [text()]
,name + ' likes ' + color AS [comment()]
,name
,name + ' has some ' + color + ' things' AS [info/text()]
FROM #favorite_colors
FOR XML PATH

请注意,我们在列名称中使用了一些名称:
  • @color : 标签属性
  • text() : 这个根标签的一些文字
  • comment() : 一条 xml 评论
  • info/text() : 特定 xml 标签中的一些文本,<info>

  • 输出如下所示:
    <row color="red">
    Some info about tim
    <!--tim likes red-->
    <name>tim</name>
    <info>tim has some red things</info>
    </row>
    <row color="blue">
    Some info about that guy
    <!--that guy likes blue-->
    <name>that guy</name>
    <info>that guy has some blue things</info>
    </row>

    总结一下,这些工具如何对字符串进行分组和连接?

    因此,对于我们看到的使用 FOR XML PATH 将字符串分组在一起的解决方案,有两个关键组件。
  • AS [text()] : 将数据作为文本写入,而不是将其包裹在标签中
  • FOR XML PATH ('') : 将根标签重命名为 '' ,或者更确切地说,完全删除它

  • 这为我们提供了本质上只是一个字符串的“XML”(空气引号)输出。
    SELECT name + ', ' AS [text()] -- no 'name' tags
    FROM #favorite_colors
    FOR XML PATH ('') -- no root tag

    返回
    tim, that guy, 

    从那里开始,只需将该数据连接回它来自的更大的数据集。

    关于sql - SQL 服务器中的 FOR XML PATH 和 [text()],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32225634/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com