zoukankan      html  css  js  c++  java
  • 转载---SQL Server XML基础学习<1>之--FOR XML PATH

    --> 测试数据:#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  '野子' , '臭流氓'
    --------------开始查询--------------------------
    --没有名称的列
    --生成此 XML。 默认情况下,针对行集中的每一行,生成的 XML 中将生成一个相应的 <row> 元素。 这与 RAW 模式相同。
    SELECT 1 FOR XML PATH
    --延伸
    SELECT [name]+'' FROM #tb FOR XML PATH
    --去掉<row> 元素
    SELECT [name]+'' FROM #tb FOR XML PATH('')
    --具有名称的列
    SELECT [name] FROM #tb FOR XML PATH
    SELECT * FROM #tb FOR XML PATH
    --列名以 @ 符号开头。
    SELECT id  AS '@id',[name] FROM #tb FOR XML PATH
    --列名不以 @ 符号开头
    SELECT [name] AS 臭流氓 FROM #tb FOR XML PATH('一群流氓')
    --列名以 @ 符号开头并包含斜杠标记 (/)
    SELECT id  AS '@id',
    [name] AS '一群流氓/臭流氓' 
    FROM #tb FOR XML PATH
    --名称指定为通配符的列
    --如果指定的列名是一个通配符 (*),则插入此列的内容时就像没有指定列名那样插入。 
    --如果此列不是 xml 类型的列,则此列的内容将作为文本节点插入
    SELECT id  AS '@id',
    [name] AS '*' 
    FROM #tb FOR XML PATH
    --列名为 XPath 节点测试的列
    --text()
    --对于名为 text() 的列,该列中的字符串值将被添加为文本节点。
    --comment()
    --对于名为 comment() 的列,该列中的字符串值将被添加为 XML 注释。
    --node()
    --对于名为 node() 的列,结果与列名为通配符 (*) 时相同。
    --处理指令(名称)
    --如果列名为处理指令,该列中的字符串值将被添加为此处理指令目标名称的 PI 值。


    SELECT id  AS '@id',
    '臭流氓' AS 'text()',
    '一个臭流氓'                   as "processing-instruction(PI)",
    'chouliumang' AS 'comment()',
    [name] AS 'EmpName/text()', 
    [name] AS '臭流氓/node()'
    FROM #tb
    WHERE id=1
    FOR XML PATH
    /*
    ----------------结果----------------------------


    <row id="1">臭流氓<?PI 一个臭流氓?><!--chouliumang--><EmpName>彪</EmpName><臭流氓>彪</臭流氓></row>
    */


    --带有指定为 data() 的路径的列名
    --如果被指定为列名的路径为 data(),则在生成的 XML 中,该值将被作为一个原子值来处理。 
    --如果序列化中的下一项也是一个原子值,则将向 XML 中添加一个空格字符。 
    --这在创建列表类型化元素值和属性值时很有用。 以下查询将检索产品型号 ID、名称和该产品型号中的产品列表。
    SELECT id  AS '@id',
    [name] AS '@name',
    [name],
    [type] AS 'data()'
    FROM #tb
    WHERE id=1
    FOR XML PATH
    /* 
    */
    --默认情况下,列中的 Null 值映射为“缺少相应的属性、节点或元素”。 
    --通过使用 ELEMENTS 指令请求以元素为中心的 XML 并指定 XSINIL 来请求为 NULL 值添加元素,
    --可以覆盖此默认行为,如以下查询所示:
    --未指定 XSINIL,将缺少 <null> 元素。
    SELECT id  AS '@id',
    NULL AS 'xx/null',
    [name] AS 'xx/name',
    [type] AS 'xx/type'
    FROM #tb
    FOR XML PATH
    --2
    SELECT id  AS '@id',
    NULL AS 'xx/null',
    [name] AS 'xx/name',
    [type] AS 'xx/type'
    FROM #tb
    FOR XML PATH, ELEMENTS XSINIL


    --ROOT/TYPE/BINARY选项
    SELECT id  AS '@id',
    [name] ,
    [type],
    0x78786F6F AS 'VARBINARY'
    FROM #tb
    FOR XML PATH,
    ROOT('oo'),--指定向产生的 XML 中添加单个顶级元素。 可以选择指定要生成的根元素名称。 默认值为“root”。
    TYPE,--指定查询以 xml 类型返回结果。
    BINARY BASE64--如果指定 BINARY Base64 选项,则查询所返回的任何二进制数据都用 base64 编码格式表示。
    --若要使用 RAW 和 EXPLICIT 模式检索二进制数据,必须指定此选项。 
    --在 AUTO 模式中,默认情况下将二进制数据作为引用返回。 有关使用示例,请参阅将 RAW 模式与 FOR XML 一起使用。

    如果有来生,一个人去远行,看不同的风景,感受生命的活力。。。
  • 相关阅读:
    drf—— 序列化组件
    drf—— RESTful API规范
    drf——APIView及其内部函数/类的源码分析
    drf—— drf的安装和使用
    226翻转二叉树
    51,N皇后
    557反转字符串中的单词III
    17.电话号码的字母组合
    459重复的子字符串
    419递增子序列
  • 原文地址:https://www.cnblogs.com/Frank99/p/5974460.html
Copyright © 2011-2022 走看看