Поделиться через


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

Применимо: SQL Server База данных SQL AzureНе поддерживается. Azure Synapse Analytics Analytics Не поддерживается. Platform System (PDW)

Режим 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>

См. также