Approccio euristico della modalità AUTO per la determinazione della struttura dei valori XML restituiti

SI APPLICA A: SQL Server Database SQL di Azure Azure Synapse Analytics Parallel Data Warehouse

La modalità AUTO determina la struttura del valore XML restituito in base alla query. Per determinare come devono essere nidificati gli elementi, la modalità AUTO, che utilizza un approccio euristico, confronta i valori delle colonne nelle righe adiacenti. Vengono confrontate colonne di tutti i tipi, ad eccezione di ntext, text, image e xml. Vengono confrontate le colonne di tipo (n)varchar(max) e varbinary(max) .

Nell'esempio seguente viene illustrato l'approccio euristico utilizzato dalla modalità AUTO per determinare la struttura del valore XML risultante:

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

Per determinare la posizione iniziale dell'elemento <T1>, se non è specificata la chiave della tabella T1 vengono confrontati tutti i valori di colonna di T1, ad eccezione di quelli di tipo ntext, text, image e xml. Supporre quindi che la colonna Name sia di tipo nvarchar(40) e che l'istruzione SELECT restituisca il set di righe seguente:

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

L'euristica in modalità AUTO confronta tutti i valori delle colonne T1, Id e Name della tabella. Si noti che le prime due righe hanno gli stessi valori per le colonne Id e Name. Di conseguenza, al risultato viene aggiunto un singolo elemento con <T1> <T2> due elementi figlio.

Il valore XML restituito è il seguente:

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

Si supponga ora che la colonna Name sia di tipo text . A causa dell'approccio euristico, la modalità AUTO non confronta valori di questo tipo, ma presuppone che siano diversi. Questa modalità comporta la generazione di CODICE XML, come illustrato nell'output seguente:

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

Vedere anche

Usare la modalità AUTO con FOR XML