在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>





