Partager via


Heuristique du mode AUTO permettant de définir la forme des données XML renvoyées

S'applique à : SQL Server Azure SQL Database Non pris en charge. Azure Synapse Analytics Non pris en charge. Analytics Platform System (PDW)

Le mode AUTO détermine la forme des données XML renvoyées en fonction de la requête. Lors de la définition de l'imbrication des éléments, l'heuristique du mode AUTO compare les valeurs de colonnes de lignes adjacentes. Les colonnes de tous les types, sauf ntext, text, imageet xml, sont comparées. Les colonnes de type (n)varchar(max) et varbinary(max) sont comparées.

L'exemple suivant illustre l'heuristique du mode AUTO qui détermine la forme des données XML obtenues :

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

Pour déterminer à quel endroit commence un nouvel élément <T1>, toutes les valeurs de colonne de T1, sauf ntext, text, image et xml, sont comparées si la clé de la table T1 n’est pas spécifiée. Ensuite, supposons que la colonne Name soit de type nvarchar(40) et que l’instruction SELECT renvoie l’ensemble de lignes suivant :

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

L’heuristique du mode AUTO compare toutes les valeurs de la table T1, les colonnes Id et Name. Les deux premières lignes contiennent les mêmes valeurs pour les colonnes Id et Name. Ainsi, un seul élément <T1> ayant deux éléments enfants <T2> est ajouté au résultat.

Voici le document XML renvoyé :

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

Supposons maintenant que la colonne Name soit de type text. L'heuristique du mode AUTO ne compare pas les valeurs de ce type. Au lieu de cela, elle considère que les valeurs ne sont pas identiques. Ce mode aboutit à la génération de données XML suivante :

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

Voir aussi