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)

  • 相关阅读:
    广播接收者的生命周期?
    如何让自己的广播只让指定的 app 接收?
    在 manifest 和代码中如何注册和使用 BroadcastReceiver?
    请描述一下 BroadcastReceiver?
    说说 Activity、Intent、Service 是什么关系
    什么是IntentService?有何优点?
    Activity 怎么和 Service 绑定,怎么在 Activity 中启动自己对应的 Service?
    Service 是否在 main thread 中执行, service 里面是否能执行耗时的操作?
    两个 Activity 之间跳转时必然会执行的是哪几个方法?
    如何保存 Activity 的状态?
  • 原文地址:https://www.cnblogs.com/lmfeng/p/2915212.html
Copyright © 2011-2022 走看看