Эвристика режима 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>