Эвристика режима AUTO в формировании возвращаемого XML-кода

Применимо к:SQL ServerБаза данных SQL AzureУправляемый экземпляр SQL AzureБаза данных SQL в Microsoft Fabric

Режим AUTO определяет основанную на запросе структуру возвращаемого XML. При определении схемы вложения элементов применяемые в режиме AUTO эвристические процедуры сравнивают значения столбцов в соседних строках. Сравниваются столбцы всех типов, за исключением ntext, text, imageи xml. Проводится также сравнение столбцов (n)varchar(max) и varbinary(max) .

В следующем примере иллюстрируются эвристики режима AUTO, определяющие структуру результирующего XML:

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, кроме ntext, text, image и xml, если ключ таблицы T1 не указан. Далее предположим, что столбец Name имеет тип данных nvarchar(40) и инструкция SELECT возвращает следующий набор строк:

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

Эвристики режима AUTO сравнивают все значения столбцов Id и Name таблицы Т1. Первые две строки имеют одинаковые значения для Id столбцов и Name столбцов. В результате в результат добавляется один <T1> элемент с двумя <T2> дочерними элементами.

Далее показан возвращенный XML:

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

Теперь предположим, что Name столбец имеет текстовый тип. Эвристики режима 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>

См. также