金色坐标

关注互联网和IT科技的个人博客

« 信息系统用户集合并办法SaaS在政府信息化建设中的应用前景 »

浅析数据库的FOR XML的应用—RAW模式

在sql server 2005中使用xml,非常方便。不仅有XML数据类型,并且对于标准数据行集与XML的转换,提供了查询的子句,也提供了处理XML的方法。

FOR XML是sql server提供的查询子句,通过该查询语句,将标准数据行集构造为一个XML。FOR XML 模式可以是 RAW、AUTO、EXPLICIT 或 PATH。它确定产生的 XML 的形状。

通过如下这个表的实际查询,初探FOR XML RAW模式的使用。示例表名叫user,查询所有数据如下:

select userid,loginname,username,registertime from [user]


现在就对这个表使用FOR XML进行查询:

1 select * from [user] for xml raw

查询结果如下:
<row UserID="4959E391-63DC-4BBF-ACEA-63EC673AEC45" LoginName="admin" UserName="管理员" RegisterTime="2007-02-10T00:00:00" />
<row UserID="4959E391-63DC-4BBF-ACEA-63EC673AEC46" LoginName="user1" UserName="用户1" RegisterTime="2007-02-08T00:00:00" />
<row UserID="4959E391-63DC-4BBF-ACEA-63EC673AEC47" LoginName="user2" UserName="用户2" RegisterTime="2007-02-09T00:00:00" />

RAW 模式将查询结果集中的每一行转换为带有通用标识符 <row> 或可能提供元素名称的 XML 元素。默认情况下,行集中非 NULL 的每列值都将映射为 <row> 元素的一个属性。

2 select * from [user] for xml raw('item')

查询结果如下:
<item UserID="4959E391-63DC-4BBF-ACEA-63EC673AEC45" LoginName="admin" UserName="管理员" RegisterTime="2007-02-10T00:00:00" />
<item UserID="4959E391-63DC-4BBF-ACEA-63EC673AEC46" LoginName="user1" UserName="用户1" RegisterTime="2007-02-08T00:00:00" />
<item UserID="4959E391-63DC-4BBF-ACEA-63EC673AEC47" LoginName="user2" UserName="用户2" RegisterTime="2007-02-09T00:00:00" />
可以自定义行元素的名称为item。

3 select * from [user] for xml raw('item'),XMLSCHEMA

查询结果如下:
  <xsd:schema targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet11" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes">
  <xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />
  <xsd:element name="item">
    <xsd:complexType>
      <xsd:attribute name="UserID" />
      <xsd:attribute name="LoginName">
        <xsd:simpleType>
          <xsd:restriction base="sqltypes:nvarchar">
            <xsd:maxLength value="50" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:attribute>
      <xsd:attribute name="UserName">
        <xsd:simpleType>
          <xsd:restriction base="sqltypes:nvarchar">
            <xsd:maxLength value="50" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:attribute>
      <xsd:attribute name="RegisterTime" />
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

到此为止,为xmlschema架构。可见,item为一个元素,而UserID,LoginName,UserName,RegisterTime均为该元素的属性。红色标识的为元素和属性。实际查询结果如下:

<item xmlns="urn:schemas-microsoft-com:sql:SqlRowSet11" UserID="4959E391-63DC-4BBF-ACEA-63EC673AEC45" LoginName="admin" UserName="管理员" RegisterTime="2007-02-10T00:00:00" />
<item xmlns="urn:schemas-microsoft-com:sql:SqlRowSet11" UserID="4959E391-63DC-4BBF-ACEA-63EC673AEC46" LoginName="user1" UserName="用户1" RegisterTime="2007-02-08T00:00:00" />
<item xmlns="urn:schemas-microsoft-com:sql:SqlRowSet11" UserID="4959E391-63DC-4BBF-ACEA-63EC673AEC47" LoginName="user2" UserName="用户2" RegisterTime="2007-02-09T00:00:00" />

4 select * from [user] for xml raw('item'),XMLSCHEMA,ELEMENTS

查询结果如下:
  <xsd:schema targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet12" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes">
  <xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />
  <xsd:element name="item">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="UserID" />
        <xsd:element name="LoginName">
          <xsd:simpleType>
            <xsd:restriction base="sqltypes:nvarchar">
              <xsd:maxLength value="50" />
            </xsd:restriction>
          </xsd:simpleType>
        </xsd:element>
        <xsd:element name="UserName" minOccurs="0">
          <xsd:simpleType>
            <xsd:restriction base="sqltypes:nvarchar">
              <xsd:maxLength value="50" />
            </xsd:restriction>
          </xsd:simpleType>
        </xsd:element>
        <xsd:element name="RegisterTime" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

此xmlschema架构,item为一个元素,而UserID,LoginName,UserName,RegisterTime也都成为了一个元素。此架构比较符合我们平时所用的xml文件。

<item xmlns="urn:schemas-microsoft-com:sql:SqlRowSet12">
  <UserID>4959E391-63DC-4BBF-ACEA-63EC673AEC45</UserID>
  <LoginName>admin</LoginName>
  <UserName>管理员</UserName>
  <RegisterTime>2007-02-10T00:00:00</RegisterTime>
</item>
<item xmlns="urn:schemas-microsoft-com:sql:SqlRowSet12">
  <UserID>4959E391-63DC-4BBF-ACEA-63EC673AEC46</UserID>
  <LoginName>user1</LoginName>
  <UserName>用户1</UserName>
  <RegisterTime>2007-02-08T00:00:00</RegisterTime>
</item>
<item xmlns="urn:schemas-microsoft-com:sql:SqlRowSet12">
  <UserID>4959E391-63DC-4BBF-ACEA-63EC673AEC47</UserID>
  <LoginName>user2</LoginName>
  <UserName>用户2</UserName>
  <RegisterTime>2007-02-09T00:00:00</RegisterTime>
</item>




原创文章,如转载请注明:转载自金色坐标 [ http://www.kingxy.com/ ]

本文链接地址:http://www.kingxy.com/archives/106.html
  • 相关文章:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 关注新浪微博:关注新浪微博
  • 关注腾讯微博:关注腾讯微博
  • 通过Google订阅本站
  • 通过鲜果订阅本站
  • 通过电子邮件订阅
  • 本站支持WAP访问

Search

Google

最新评论及回复

最近发表

金色坐标博客——京ICP备09009094号

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本站内容必须也遵循“署名-非商业用途-保持一致”的创作共用协议.
KingXY Blog - This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License.