zoukankan      html  css  js  c++  java
  • For XML子句,和xml的四大法方:query,Value,exist,nodes

    使用For XML 子句从数据库获得xml数据

    在SQL中使用带for xml子句的select查询,可以从数据库中获得xml数据,根据xml使用模式,返回具有一定格式的xml文档片段。
    For XML 子句可以有RAW AUTO EXPLICIT PATH 四种模式

    使用RAW模式,for xml 子句查询结果将返回一个属性中心型的xml文档片段:
    select * from t1 for xml raw
    <row id="1" type="2" value="3" />
    ...

    在for xml raw/auto 后加上elements参数,则返回以元素为中心型的xml文档片段。
    select * from t1 for xml raw,elements
    <row>
     <id>1</id>
     <type>2</type>
     <value>3</value>
    </row>
    ...
    还可以为元素名进行重命名for xml raw("rename")
    这样row的名称就会变成rename。

    使用Auto模式,和Raw模式相似,但是返回的xml的每一行元素名称有表名代替了raw模式的row,其他的度一样,可以使用elements关键字。
    <T1>
     <id>1</id>
     <type>2</type>
     <value>3</value>
    </T1>
    ...
    使用path模式,使用示例:
    select id as "depart/@id",
           name as "depart/name",
           degree as "depart/Teacher/degree"
    from department
    for xml path
    这个模式会根据as后面的格式路径返回具体的xml格式,人为控制。

    使用cast、convert进行类型转换赋值
    declare @myDoc xml
    declare @mtstr varchar(500)
    set @mtdoc = cast(@mtstr as xml)
    set @mtdoc = convert(xml,@mtstr)

    xml数据类型的方法:query,Value,exist,nodes
    首先定义xml类型变量
    declare @x xml
    set @x= '<school>
        <student>
            <no>1</no>
            <age>23</age>
        </student>
    </school>'

    示例:query方法,语法格式 @x.query('xquery')
    select @x.query('
    <student>
    {for $st in /school/student
       return <name>{data($st/age)}</name>
    }
    </student>
    ')
    返回结果:
    <student>
        <name>23</name>
        <name>24</name>
        ...
    </student>

    示例:value方法,语法格式 @x.value('xquery','sql_type')
    1、declare @age int
       set @age = @x.value('//age[1]','integer')
    2、select domxml.value('(//classroomno)[1]','varchar(4)') as 编号
              ,domxml.value('(//type)[1]','varchar(4)') as 类型
       from classxml

    示例:exist方法,若调用exist的xml类型变量为null,则返回null,若xml变量不为null,并且查询的节点存在则返回1,否则返回0.
    例如:select * from classxml
          where roxml.exist('(//type)[.="mu"]')=1

    示例:nodes方法,语法格式 nodes('xquery') as t1(v1)
    调用nodes返回对应子元素的行集,其结果存于临时表中。
    select stetemp.xmltemp.query('.')
    from @x.nodes('/school/student') as stetemp(xmltemp)

  • 相关阅读:
    设计模式
    显示WiFi密码
    05-变量
    04-杂谈
    03-杂谈
    02-杂谈
    01-linux介绍、命令
    14-python--inner
    13-python--bibao
    11-python-iterator
  • 原文地址:https://www.cnblogs.com/lmfeng/p/2915212.html
Copyright © 2011-2022 走看看