• 转载---SQL Server XML基础学习<3>之--FOR XML EXPLICIT


    --使用 RAW 和 AUTO 模式不能很好地控制从查询结果生成的 XML 的形状。
    --但是,对于要从查询结果生成 XML,EXPLICIT 模式会提供非常好的灵活性。

    --必须以特定的方式编写 EXPLICIT 模式查询,以便将有关所需的 XML 的附加信息(如 XML 中的所需嵌套)显式指定为查询的一部分。
    --根据所请求的 XML,编写 EXPLICIT 模式查询可能会很烦琐。您会发现使用 PATH 模式(具有嵌套)相对编写 EXPLICIT 模式查询而言更加简单。
    --因为将所需的 XML 描述为 EXPLICIT 模式查询的一部分,所以必须确保生成的 XML 格式正确且有效。

    --> 测试数据:#tb
    IF OBJECT_ID('TEMPDB.DBO.#tb') IS NOT NULL
    DROP TABLE #tb
    GO
    CREATE TABLE #tb
    (
    [id] INT IDENTITY PRIMARY KEY ,
    [name] VARCHAR(4),
    [type] VARCHAR(10)
    )
    INSERT #tb
    SELECT '彪' , '流氓'
    UNION ALL
    SELECT '阿紫' , '流氓'
    UNION ALL
    SELECT '小强' , '流氓'
    UNION ALL
    SELECT '光辉' , '臭流氓'
    UNION ALL
    SELECT '小D' , '臭流氓'
    UNION ALL
    SELECT '野子' , '臭流氓'
    --------------开始查询--------------------------
    --EXPLICIT 模式会将由查询执行生成的行集转换为 XML 文档。
    --为使 EXPLICIT 模式生成 XML 文档,行集必须具有特定的格式。
    --这需要您编写 SELECT 查询以生成具有特定格式的行集(通用表),以便处理逻辑随后可以生成所需的 XML。

    --首先,查询必须生成下列两个元数据列:
    --第一列必须提供当前元素的标记号(整数类型),并且列名必须是 Tag。查询必须为从行集构造的每个元素提供唯一标记号。
    --第二列必须提供父元素的标记号,并且此列的列名必须是 Parent。这样,Tag 和 Parent 列将提供层次结构信息。


    SELECT
    1 AS Tag,--Tag 是一个强制列,代表一个最高节点
    NULL AS Parent,--Parent 同样是一个强之列,代码中NULL表示没有父节点,也就是该层次为顶层。
    3 AS [node!1]
    --"node!1" 此种形式代表的是根节点。
    --"node" 元素名称
    --"1" 代表的是指定层次结构的节点级别
    FOR XML EXPLICIT

    SELECT
    1 AS Tag,
    NULL AS Parent,
    NULL AS [root!1],
    NULL AS [node!2!id!ELEMENT]
    UNION ALL
    SELECT
    2 AS Tag,--这里的tag 代表的是第二层的意思
    1 AS Parent,--Parent的值代表了是Tag的父节点
    NULL ,
    id
    FROM #tb WHERE id=1
    FOR XML EXPLICIT
    --------------结果--------------------------
    /*
    <root>
    <node>
    <id>1</id>
    </node>
    </root>
    */
    --------------注释--------------------------
    /*
    [node!2!id!ELEMENT]
    node 代表的是节点名称;
    2代表的节点层次;
    id 表示的是元素名称;.
    ELEMENT 选项表示向 <node> 元素添加了 <id> 元素子级,而不是添加属性。
    */
    --再添加一个节点
    SELECT
    1 AS Tag,
    NULL AS Parent,
    NULL AS [root!1],
    NULL AS [node!2!id],
    NULL AS [root2!3!value]
    UNION ALL
    SELECT
    2 AS Tag,--这里的tag 代表的是第二层的意思
    1 AS Parent,--Parent的值代表了是Tag的父节点
    NULL,
    id,NULL
    FROM #tb WHERE id=1
    UNION ALL
    SELECT
    3 AS Tag,
    2 AS Parent,
    NULL ,
    0,
    -1
    FOR XML EXPLICIT
    --------------结果--------------------------
    /*
    <root>
    <node>
    <id>1</id>
    <root2>
    <value>-1</value>
    </root2>
    </node>
    </root>
    */


    SELECT
    1 AS Tag,
    NULL AS Parent,
    NULL AS [root!1],
    NULL AS [node!2!id!ELEMENT],
    NULL AS [root2!3!value!ELEMENT]
    UNION ALL
    SELECT
    2 AS Tag,--这里的tag 代表的是第二层的意思
    1 AS Parent,--Parent的值代表了是Tag的父节点
    NULL,
    id,NULL
    FROM #tb WHERE id=1
    UNION ALL
    SELECT
    3 AS Tag,
    2 AS Parent,
    NULL ,
    0,
    -1
    FOR XML EXPLICIT

    如果有来生,一个人去远行,看不同的风景,感受生命的活力。。。
  • 相关阅读:
    2019.1.8兔子问题和汉诺塔问题的解决代码
    REST
    存储过程和函数练习
    十六、性能优化
    十五、MySQl日志
    Shell入门
    十四、数据备份
    十三、MySQL触发器
    十二、视图
    十一、MySQL锁
  • 原文地址:https://www.cnblogs.com/Frank99/p/5974480.html
Copyright © 2020-2023  润新知