• 工作总结
  • 工作计划
  • 心得体会
  • 述职报告
  • 思想汇报
  • 发言讲话稿
  • 演讲稿
  • 申请书
  • 读后感
  • 报告材料
  • 策划方案
  • 当前位置: 写作资料库 > 其他范文 > 正文

    指定管辖 SQLSERVER中XML查询:FORXML指定RAW

    时间:2018-08-15 16:27:21 来源:写作资料库 本文已影响 写作资料库手机站

    SQL SERVER中XML查询:FOR XML指定RAW 前言

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

    基础FOR XML查询

    看实例:

    with TestXml
    as
    (
    select 1 as id,"LeeWhoeeUniversity" as name
    union all
    select 2,"SQLSERVER中XML查询"
    union all
    select 3 ,"FOR XML"
    )
    select id,name from testxml for xml raw,type

    运行后结果:

    <row id="1" name="LeeWhoeeUniversity" />
    <row id="2" name="SQLSERVER中XML查询" />
    <row id="3" name="FOR XML" />

    红色字体type可选,不会影响结果,只是影响数据类型。

    指定 ELEMENTS:

    with TestXml
    as
    (
    select 1 as id,N"LeeWhoeeUniversity" as name
    union all
    select 2,N"SQLSERVER中XML查询"
    union all
    select 3 ,null
    )
    select id,name from testxml for xml raw,elements

    注意,第三行值改为NULL值进行测试。

    结果:

    <row>
    <id>1</id>
    <name>LeeWhoeeUniversity</name>
    </row>
    <row>
    <id>2</id>
    <name>SQLSERVER中XML查询</name>
    </row>
    <row>
    <id>3</id>
    </row>

    元素name在第三行没有出现,因为是NULL值。

    但是我们可以用XSINIL生成NULL值的name元素。

    如:

    with TestXml
    as
    (
    select 1 as id,N"LeeWhoeeUniversity" as name
    union all
    select 2,N"SQLSERVER中XML查询"
    union all
    select 3 ,null
    )
    select id,name from testxml for xml raw,elements XSINIL
    运行结果:

    <row xmlns:xsi="/2001/XMLSchema-instance">
    <id>1</id>
    <name>LeeWhoeeUniversity</name>
    </row>
    <row xmlns:xsi="/2001/XMLSchema-instance">
    <id>2</id>
    <name>SQLSERVER中XML查询</name>
    </row>
    <row xmlns:xsi="/2001/XMLSchema-instance">
    <id>3</id>
    <name xsi:nil="true" />
    </row>

    使用XMLDATA和XMLSCHEMA

    XMLDATA返回描述文档结构的 XML-DATA 架构。

    如:

    with TestXml
    as
    (
    select 1 as id,N"LeeWhoeeUniversity" as name
    union all
    select 2,N"SQLSERVER中XML查询"
    union all
    select 3 ,null
    )
    select id,name from testxml for xml raw,XMLDATA


    结果:

    <Schema name="Schema2" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">
    <ElementType name="row" content="empty" model="closed">
    <AttributeType name="id" dt:type="i4" />
    <AttributeType name="name" dt:type="string" />
    <attribute type="id" />
    <attribute type="name" />
    </ElementType>
    </Schema>
    <row xmlns="x-schema:#Schema2" id="1" name="LeeWhoeeUniversity" />
    <row xmlns="x-schema:#Schema2" id="2" name="SQLSERVER中XML查询" />
    <row xmlns="x-schema:#Schema2" id="3" />

    XML SCHEMA

    通过指定 XMLSCHEMA 选项,您可以针对结果请求 XSD 架构:

    with TestXml
    as
    (
    select 1 as id,N"LeeWhoeeUniversity" as name
    union all
    select 2,N"SQLSERVER中XML查询"
    union all
    select 3 ,null
    )
    select id,name from testxml for xml raw,XMLSCHEMA
    结果:

    <xsd:schema targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet2" xmlns:xsd="/2001/XMLSchema" xmlns:sqltypes="/sqlserver/2004/sqltypes" elementFormDefault="qualified">
    <xsd:import namespace="/sqlserver/2004/sqltypes" schemaLocation="/sqlserver/2004/sqltypes/sqltypes.xsd" />
    <xsd:element name="row">
    <xsd:complexType>
    <xsd:attribute name="id" type="sqltypes:int" use="required" />
    <xsd:attribute name="name">
    <xsd:simpleType>
    <xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="2052" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth">
    <xsd:maxLength value="12" />
    </xsd:restriction>
    </xsd:simpleType>
    </xsd:attribute>
    </xsd:complexType>
    </xsd:element>
    </xsd:schema>
    <row xmlns="urn:schemas-microsoft-com:sql:SqlRowSet2" id="1" name="LeeWhoeeUniversity" />
    <row xmlns="urn:schemas-microsoft-com:sql:SqlRowSet2" id="2" name="SQLSERVER中XML查询" />
    <row xmlns="urn:schemas-microsoft-com:sql:SqlRowSet2" id="3" />

    您可以将目标命名空间 URI 指定为 FOR XML 中 XMLSCHEMA 的可选参数。

    with TestXml
    as
    (
    select 1 as id,N"LeeWhoeeUniversity" as name
    union all
    select 2,N"SQLSERVER中XML查询"
    union all
    select 3 ,null
    )
    select id,name from testxml for xml raw,XMLSCHEMA ("urn:/lihui_830501")

    结果:

    <xsd:schema targetNamespace="urn:/lihui_830501" xmlns:xsd="/2001/XMLSchema" xmlns:sqltypes="/sqlserver/2004/sqltypes" elementFormDefault="qualified">
    <xsd:import namespace="/sqlserver/2004/sqltypes" schemaLocation="/sqlserver/2004/sqltypes/sqltypes.xsd" />
    <xsd:element name="row">
    <xsd:complexType>
    <xsd:attribute name="id" type="sqltypes:int" use="required" />
    <xsd:attribute name="name">
    <xsd:simpleType>
    <xsd:restriction base="sqltypes:nvarchar" sqltypes:localeId="2052" sqltypes:sqlCompareOptions="IgnoreCase IgnoreKanaType IgnoreWidth">
    <xsd:maxLength value="12" />
    </xsd:restriction>
    </xsd:simpleType>
    </xsd:attribute>
    </xsd:complexType>
    </xsd:element>
    </xsd:schema>
    <row xmlns="urn:/lihui_830501" id="1" name="LeeWhoeeUniversity" />
    <row xmlns="urn:/lihui_830501" id="2" name="SQLSERVER中XML查询" />
    <row xmlns="urn:/lihui_830501" id="3" />

    检索二进制数据

    像XMLDATA一样,在SQL中指定BINARY BASE64。

    重命名 <row> 元素

    with TestXml
    as
    (
    select 1 as id,N"LeeWhoeeUniversity" as name
    union all
    select 2,N"SQLSERVER中XML查询"
    union all
    select 3 ,null
    )
    select id,name from testxml for xml raw ("myrow")

    结果:

    <myrow id="1" name="LeeWhoeeUniversity" />
    <myrow id="2" name="SQLSERVER中XML查询" />
    <myrow id="3" />

    指定ELEMENTS的情况类同。

    为 FOR XML 生成的 XML 指定根元素

    with TestXml
    as
    (
    select 1 as id,N"LeeWhoeeUniversity" as name
    union all
    select 2,N"SQLSERVER中XML查询"
    union all
    select 3 ,null
    )
    select id,name from testxml for xml raw,root("myroot")

    结果:

    <myroot>
    <row id="1" name="LeeWhoeeUniversity" />
    <row id="2" name="SQLSERVER中XML查询" />
    <row id="3" />
    </myroot>

    查询 XML 类型的列

    ?