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


Эвристические методы режима AUTO, используемые при формировании возвращаемого XML-кода

Режим 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 ...
FOR XML AUTO
ORDER BY T1.Id

Для определения начала нового элемента <T1> сравниваются все значения столбцов таблицы T1, за исключением столбцов типов данных ntext, text, image и xml, если ключ таблицы Т1 не задан. Далее предположим, что столбец 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 имеет тип данных text. Эвристики режима 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>

См. также

Справочник

Использование режима AUTO совместно с FOR XML