返回的 XML 成形过程中的 AUTO 模式试探方法
适用于: SQL Server Azure SQL 数据库 Azure Synapse Analytics 分析平台系统 (PDW)
AUTO 模式根据查询决定返回的 XML 的形式。 在决定嵌套元素的方式时,AUTO 模式试探方法会比较相邻行中的列值。 ntext、 text、 image和 xml类型以外的所有类型的列都会进行比较。 (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 中除 ntexttext、image 和 xml 类型以外的所有列的值。 接下来,假定 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>