输出的结果如下:
| <row> <ID>1</ID> <User_Name>admin</User_Name> <User_pwd>admin888</User_pwd> </row> <row> <ID>2</ID> <User_Name>user</User_Name> <User_pwd>user</User_pwd> </row> |
AUTO模式:
AUTO 模式可确定基于查询返回的 XML 的形状。在确定嵌套元素的方式时,AUTO 模式试探法将比较相邻行中的列值。在FROM 子句内,每个在 SELECT 子句中至少有一列被列出的表都表示为一个 XML 元素。如果在 FOR XML 子句中指定了可选的 ELEMENTS 选项,SELECT 子句中列出的列将映射到属性或子元素。
同样来看看两种实现的方式:
语句一:
| SELECT ID, User_Name, User_pwd FROM Tb_User FOR XML AUTO |
输出的结果如下:
| <Tb_User ID="1" User_Name="admin" User_pwd="admin888" /> <Tb_User ID="2" User_Name="user" User_pwd="user" /> |
语句二:
| SELECT ID, User_Name, User_pwd FROM Tb_User FOR XML AUTO,ELEMENTS |
输出的结果如下:
| <Tb_User> <ID>1</ID> <User_Name>admin</User_Name> <User_pwd>admin888</User_pwd> </Tb_User> <Tb_User> <ID>2</ID> <User_Name>user</User_Name> <User_pwd>user</User_pwd> </Tb_User> |
在 EXPLICIT 模式中,查询书写器控制由执行查询所返回的 XML 文档的形式。必须以特定的方式编写查询,将有关预期嵌套的附加信息显式指定为查询的一部分。当指定 EXPLICIT 模式时,必须负责确保生成的 XML 符合语法规则并且有效。
EXPLICIT 模式会将由查询执行生成的行集转换为 XML 文档。为使 EXPLICIT 模式生成 XML 文档,行集必须具有特定的格式。这需要编写 SELECT 查询以生成具有特定格式的行集(通用表),以便处理逻辑随后可以生成所需的 XML。
首先,查询必须生成下列两个元数据列:
第一列必须提供当前元素的标记号(整数类型),并且列名必须是 Tag。查询必须为从行集构造的每个元素提供唯一标记号。
第二列必须提供父元素的标记号,并且此列的列名必须是 Parent。这样,Tag 和 Parent 列将提供层次结构信息。
前两列是 Tag 和 Parent,它们是元数据列。这些值确定层次结构。查询必须以特定的方式提供列名,Parent 列中的 0 或 NULL 表明相应的元素没有父级。
在构造 XML 的过程中,处理逻辑为每行选择一组列,然后构造一个元素。
现在来看看下面的两个语句:
语句一:
| SELECT 1 as Tag, NULL as Parent, User_Name as [TbUser!1!UserName], User_pwd as [TbUser!2!UserPwd] FROM Tb_User FOR XML EXPLICIT |
输出的结果如下:
| <TbUser UserName="admin" /> <TbUser UserName="user" /> |
语句二:
| SELECT 2 as Tag, NULL as Parent, User_Name as [TbUser!1!UserName], User_pwd as [TbUser!2!UserPwd] FROM Tb_User FOR XML EXPLICIT |
输出的结果如下:
| <TbUser UserPwd="admin888" /> <TbUser UserPwd="user" /> |
在此示例中,列TbUser!1!UserName和TbUser!2!UserPwd 形成一组,然后该组用于构造元素。对于第一行中的 Tag 列值 1和对于 Tag 列值为 2 的行,根据Tag的选择的不同,生成对应表的记录就发生了变化。

