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: