Udostępnij za pośrednictwem


Używanie trybu automatycznego

Jak opisano w Konstruowanie XML za pomocą języka XML dla, tryb automatycznego zwraca wyniki kwerendy jako zagnieżdżonych elementów XML.Nie zapewnia poziom kontroli nad kształtem XML generowany w wyniku kwerendy.Kwerendy trybu automatycznego są przydatne, jeśli chcesz wygenerować proste hierarchie.Jednakże Używanie trybu JAWNE i Używanie trybu ścieżki zapewniają większą kontrolę i elastyczność przy podejmowaniu decyzji kształtu XML z wyniku kwerendy.

Każda tabela w klauzula FROM, z którego znajduje się co najmniej jedną kolumna w klauzula SELECT jest reprezentowana jako XML element.Kolumn wymienionych w klauzula SELECT są mapowane do atrybutów lub podelementy, jeśli opcja elementy opcjonalne jest określony w klauzula dla XML.

Hierarchia XML zagnieżdżenia elementów XML wynikowy jest oparty na celu tabele określone według kolumn określonych w klauzula SELECT.Dlatego istotne jest kolejność, w której kolumna nazwy są określone w klauzula SELECT.Po pierwsze, lewej tabela, identyfikowany formularze elementem najwyższego w wynikowym dokumencie XML.Druga tabela skrajna identyfikowane według kolumn w instrukcja SELECT formularze podelement w pierwszym elementem itd.

Jeśli nazwy kolumn wymienionych w klauzula SELECT z tabela, która już jest identyfikowany przez uprzednio określonych kolumn w klauzula SELECT, kolumna jest dodawana jako atrybut elementu już utworzone, zamiast otwierania nowego poziom hierarchii.Jeśli określono opcję elementy kolumna jest dodawana jako atrybut.

Na przykład wykonać tej kwerendy:

SELECT Cust.CustomerID, 
       OrderHeader.CustomerID,
       OrderHeader.SalesOrderID, 
       OrderHeader.Status,
       Cust.CustomerType
FROM Sales.Customer Cust, Sales.SalesOrderHeader OrderHeader
WHERE Cust.CustomerID = OrderHeader.CustomerID
ORDER BY Cust.CustomerID
FOR XML AUTO

Jest to wynik częściowy:

<Cust CustomerID="1" CustomerType="S">
  <OrderHeader CustomerID="1" SalesOrderID="43860" Status="5" />
  <OrderHeader CustomerID="1" SalesOrderID="44501" Status="5" />
  <OrderHeader CustomerID="1" SalesOrderID="45283" Status="5" />
  <OrderHeader CustomerID="1" SalesOrderID="46042" Status="5" />
</Cust>
...

Poniższe w klauzula SELECT:

  • Odwołuje się IDKlienta w tabela Nabywca.Dlatego <Cust> element jest tworzony i IDKlienta jest dodawana jako atrybut.

  • Dalej, trzy kolumny, OrderHeader.CustomerID, OrderHeader.SaleOrderID i OrderHeader.Status, odniesienia w tabela OrderHeader.Dlatego <OrderHeader> element jest dodawany jako podelement z <Cust> element i trzy kolumny zostaną dodane jako atrybuty <OrderHeader>.

  • Następnie kolumna Cust.CustomerType ponownie odwołuje tabela Nabywca już zidentyfikowany kolumna Cust.CustomerID.Dlatego jest tworzony żaden nowy element.Zamiast tego atrybut CustomerType jest dodawany do <Cust> element, który został wcześniej utworzony.

  • Kwerendy określa aliasy dla nazw tabela.Aliasy te pojawiają się jako nazwy odpowiedniego elementu.

  • ORDER BY jest wymagany do grupowania wszystkich dzieci poniżej nadrzędnej.

Ta kwerenda jest podobny do poprzedniego, z wyjątkiem klauzula SELECT określa kolumny w tabela OrderHeader przed kolumn w tabela Nabywca.Dlatego pierwszym <OrderHeader> utworzony element a <Cust> element podrzędność jest dodawany do niej

select OrderHeader.CustomerID,
       OrderHeader.SalesOrderID, 
       OrderHeader.Status,
       Cust.CustomerID, 
       Cust.CustomerType
from Sales.Customer Cust, Sales.SalesOrderHeader OrderHeader
where Cust.CustomerID = OrderHeader.CustomerID
for xml auto

Jest to wynik częściowy:

<OrderHeader CustomerID="1" SalesOrderID="43860" Status="5">
  <Cust CustomerID="1" CustomerType="S" />
</OrderHeader>
...

Dodaje się opcja elementy XML dla klauzula, zwracana jest zorientowany na element XML.

SELECT Cust.CustomerID, 
       OrderHeader.CustomerID,
       OrderHeader.SalesOrderID, 
       OrderHeader.Status,
       Cust.CustomerType
FROM Sales.Customer Cust, Sales.SalesOrderHeader OrderHeader
WHERE Cust.CustomerID = OrderHeader.CustomerID
ORDER BY Cust.CustomerID
FOR XML AUTO, ELEMENTS

Jest to wynik częściowy:

<Cust>
  <CustomerID>1</CustomerID>
  <CustomerType>S</CustomerType>
  <OrderHeader>
    <CustomerID>1</CustomerID>
    <SalesOrderID>43860</SalesOrderID>
    <Status>5</Status>
  </OrderHeader>
   ...
</Cust>
...

W tej kwerendzie IDKlienta wartości są porównywane z jednego wiersza do tworzenia następnej <Cust> elementów, ponieważ IDKlienta jest klucz podstawowy tabela.Jeśli IDKlienta nie zostanie zidentyfikowany jako klucz podstawowy w tabela wszystkie wartości kolumna (IDklienta, CustomerType w tej kwerendzie) są porównywane z jednego wiersza do następnego.Jeżeli różnią się wartości, nowy <Cust> element zostanie dodany do pliku XML.

Podczas porównywania wartości te kolumna, jeżeli którykolwiek z kolumn, które mają być porównane typu tekstu, ntext, obrazu, lub xml, dla XML zakłada, że wartości są różne i nie porównaniu nawet może być taka sama.Jest to spowodowane porównanie dużych obiektów nie jest obsługiwane.Elementy są dodawane do wyników dla każdego wiersza zaznaczone.Uwaga tej kolumny (n)varchar(max) i varbinary(max) są porównywane.

Kiedy kolumn w klauzula SELECT nie można skojarzyć z dowolnej tabeli w klauzula FROM, jak przypadek z kolumna agregująca lub kolumna obliczana, kolumna jest dodawany w dokumencie XML w najwyższej podziałowej poziom zagnieżdżenia w miejscu, przypadek gdy napotka na liście.Jeśli takiej kolumny jest wyświetlany jako pierwszą kolumnę w klauzula SELECT, kolumna jest dodawana do najwyższego elementu.

Jeśli symbol wieloznaczny gwiazdki (*) jest określony w klauzula SELECT, zagnieżdżanie jest określana w taki sam sposób jak opisano wcześniej, w zależności od kolejności wierszy są zwracane przez kwerendy aparat.

W tej sekcji

Więcej informacji na temat trybu automatycznego można znaleźć w następujących tematach: