Compartilhar via


Heurística de modo AUTO na formação do XML retornado

Aplica-se a: SQL Server Banco de Dados SQL do Azure Não há suporte. Azure Synapse Analytics Não há suporte. PDW (Analytics Platform System)

O modo AUTO determina a forma do XML retornado com base na consulta. Para determinar como os elementos devem ser aninhados, a heurística do modo AUTO compara valores da coluna em linhas adjacentes. São comparadas colunas de todos os tipos, menos ntext, text, imagee xml. São comparadas colunas do tipo (n)varchar(max) e varbinary(max) .

O exemplo seguinte ilustra a heurística do modo AUTO que determina a forma do XML resultante:

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

Para determinar o local em que um novo elemento <T1> começa, todos os valores de T1 da coluna, exceto ntext, text, image e xml, serão comparados se a chave na tabela T1 não for especificada. Em seguida, assuma que a coluna Name é nvarchar(40) e a instrução SELECT retornará este conjunto de linhas:

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

A heurística do modo AUTO compara todos os valores da tabela T1 e as colunas Name e Id. As duas primeiras linhas têm os mesmos valores para as colunas Id e Name. Como resultado, um único elemento <T1> com dois elementos filho <T2> é adicionado ao resultado.

O XML retornado é o seguinte:

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

Agora assuma que a coluna Name é do tipo text. A heurística do modo AUTO não compara os valores para esse tipo. Em vez disso, ela supõe que os valores não sejam os mesmos. Esse modo resulta na geração de XML conforme mostrado na seguinte saída:

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

Confira também