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

适用于: SQL Server Azure SQL 数据库 Not supported. Azure Synapse Analytics Not supported. Analytics Platform System (PDW)

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

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

SELECT T1.Id, T2.Id, T1.Name
FROM   T1, T2
WHERE Col1 = 1 /* actual predicate goes here*/
ORDER BY T1.Id
FOR XML AUTO;

要确定新 <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>

另请参阅