返回的 XML 成形过程中的 AUTO 模式试探方法

AUTO 模式根据查询决定返回的 XML 的形式。在决定嵌套元素的方式时,AUTO 模式试探方法会比较相邻行中的列值。ntexttextimagexml 类型以外的所有类型的列都会进行比较。(n)varchar(max)varbinary(max) 类型的列也会进行比较。

下面的示例说明了确定生成的 XML 的形式的 AUTO 模式试探方法:

SELECT T1.Id, T2.Id, T1.Name
FROM   T1, T2
WHERE ...
FOR XML AUTO
ORDER BY T1.Id

如果未指定表 T1 的键,若要确定新 <T1> 元素的开始位置,需要比较 T1 中除 ntexttextimagexml 类型以外的所有列的值。接下来,假定 Name 列的数据类型为 nvarchar(40),SELECT 语句将返回如下行集:

T1.Id  T1.Name  T2.Id
-----------------------
1       Andrew    2
1       Andrew    3
1       Nancy     4

AUTO 模式试探方法将比较表 T1 的所有值(Id 列和 Name 列)。因为前两行的 Id 列和 Name 列具有相同的值,所以向结果中添加了一个具有两个 <T2> 子元素的 <T1> 元素。

下面是返回的 XML:

<T1 Id="1" Name="Andrew">
    <T2 Id="2" />
    <T2 Id="3" />
</T1>
<T1 Id="1" Name="Nancy" >
      <T2 Id="4" />
</T>

现在,假定 Name 列是 text 类型。AUTO 模式试探方法不比较此类型的值,而是认为这些值不相同。这将产生如下所示的 XML 生成结果:

<T1 Id="1" Name="Andrew" >
  <T2 Id="2" />
</T1>
<T1 Id="1" Name="Andrew" >
  <T2 Id="3" />
</T1>
<T1 Id="1" Name="Nancy" >
  <T2 Id="4" />
</T1>

请参阅

参考