• SQL SERVER中XML查询:FOR XML指定PATH


    SQL SERVER中XML查询:FOR XML指定PATH


    前言


    在SQL SERVER中,XML查询能够指定RAW,AUTO,EXPLICIT,PATH。本文用一些实例介绍SQL SERVER中指定PATH的XML查询。



    PATH參数


    PATH('參数'),參数是用来重命名ROW的,ROW是默认生成的名称。
    select 'Hui' for xml path  结果:<row>Hui</row>
    select 'Hui' for xml path ('root') 结果:<root>Hui</root>


    不带名称的列


    select 'Hui Li' for xml path
    结果:
    <row>Hui Li</row>


    具有名称的列


    列名以 @ 符号开头


    select 'Hui Li' as [@name] for xml path  结果:<row name="Hui Li" />


    列名不以 @ 符号开头



    select 'Hui Li' as [name] for xml path  结果:
    <row>
      <name>Hui Li</name>
    </row>


    列名不以 @ 符号开头并包括斜杠标记 (/)


    select 'Hui' as [name/first] for xml path  结果:
    <row>
      <name>
        <first>Hui</first>
      </name>
    </row>



    多个列共享同一前缀



    select 'Hui' as [name/first],'Li' as [name/last] for xml path  结果:
    <row>
      <name>
        <first>Hui</first>
        <last>Li</last>
      </name>
    </row>
    注意大写和小写敏感。


    共享同一前缀多列被打断顺序


    select 'Hui' as [name/first],'Chicago' as [address],'Li' as [name/last] for xml path  结果:
    <row>
      <name>
        <first>Hui</first>
      </name>
      <address>Chicago</address>
      <name>
        <last>Li</last>
      </name>
    </row>


    称指定为通配符的列


    select 'Hui' as [*],' ' as [*], 'Li' as [*] for xml path
    select 'Hui',' ', 'Li' for xml path
    上面两个SQL语句运行结果同样:
    <row>Hui Li</row>
    假设是XML类型,则作为一个子元素插入XML树。
    declare @table table(name varchar(50), xmlcontent xml)
    insert into @table select 'Hui', '<root><person></person></root>'
    select name,xmlcontent as [*] from @table for xml path
    结果:
    <row>
      <name>Hui</name>
      <root>
        <person />
      </root>
    </row>


    列名为 XPath 节点測试的列



    列名

    行为

    text()

    对于名为 text() 的列,该列中的字符串值将被加入为文本节点。

    comment()

    对于名为 comment() 的列,该列中的字符串值将被加入为 XML 凝视。

    node()

    对于名为 node() 的列,结果与列名为通配符 (*) 时同样。

    处理指令(名称)

    假设列名为处理指令,该列中的字符串值将被加入为此处理指令目标名称的 PI 值。


    演示样例:
    select 'Hui' as [first/text()],'Li' as [last/node()],'Hui Li' as [fullname/comment()],'test' as "processing-instruction(PI)" for xml path
    结果:
    <row>
      <first>Hui</first>
      <last>Li</last>
      <fullname>
        <!--Hui Li-->
      </fullname>
      <?PI test?>
    </row>


    带有指定为 data() 的路径的列名


    假设被指定为列名的路径为 data(),则在生成的 XML 中,该值将被作为一个原子值来处理。假设序列化中的下一项也是一个原子值,则将向 XML 中加入一个空格字符。这在创建列表类型化元素值和属性值时非常实用。
    with T
    as
    (
    select 11 as id
    union all
    select 22
    union all
    select 33
    )
    select id as [data()] from T for xml path ('')
    结果:
    11 22 33
    这里的('')能够理解为把XML的根元素名称设为空。

    NULL值列


    select 'hui' as [name],null as [address] for xml path
    结果:
    <row>
      <name>hui</name>
    </row>
    没有不论什么相关address的内容,指定ELEMENTS XSINIL后:
    select 'hui' as [name],null as [address] for xml path ,ELEMENTS XSINIL
    结果:
    <row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <name>hui</name>
      <address xsi:nil="true" />
    </row>


    PATH 模式中的命名空间支持


    WITH XMLNAMESPACES(N'乐可乐可的部落格' as a)
    SELECT 1 as 'a:b'
    FOR XML PATH
    结果:
    <row xmlns:a="乐可乐可的部落格">
      <a:b>1</a:b>
    </row>

    总结


    以上对指定EXPLICIT的XML查询就介绍完了。到此为止,SQL SERVER中的指定RAW,AUTO,EXPLICIT,PATHXML查询就所有介绍完成。

    1. SQL SERVER中XML查询:FOR XML指定RAW
    2. SQL SERVER中XML查询:FOR XML指定AUTO
    3. SQL SERVER中XML查询:FOR XML指定EXPLICIT
    4. SQL SERVER中XML查询:FOR XML指定PATH
    5. 关于XML类型,请參考:http://blog.csdn.net/leewhoee/article/details/8571286
    6. 关于XML索引,请參考:http://blog.csdn.net/leewhoee/article/details/8579743



  • 相关阅读:
    Xlua侧如何接受CSharp侧的可变参数
    C# 中如何精确地测量一段逻辑的执行时间
    C#中设计一个 ListPool 的方案
    unity中获取设备的信息
    Oracle-游标-取钱-存钱-转账
    Oracle 存储过程与java调用
    PL/SQL loop,while.for循环
    PL/SQL if case when
    PL/SQL %type %rowtype
    Oracle PLSQL入门
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4028800.html
Copyright © 2020-2023  润新知