• 爱情文章
  • 亲情文章
  • 友情文章
  • 生活随笔
  • 校园文章
  • 经典文章
  • 人生哲理
  • 励志文章
  • 搞笑文章
  • 心情日记
  • 英语文章
  • 范文大全
  • 作文大全
  • 新闻阅读
  • 当前位置: 山茶花美文网 > 经典文章 > 正文

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

    时间:2020-05-29来源:山茶花美文网 本文已影响 山茶花美文网手机站
    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 类型的列

    ?

    • 爱情文章
    • 亲情文章
    • 友情文章
    • 随笔
    • 哲理
    • 励志
    • 范文大全