Udostępnij za pośrednictwem


W trybie AUTO

Zgodnie z opisem w Constructing XML Using FOR XMLTryb AUTO zwraca wyniki kwerendy zagnieżdżone elementy XML. To nie zapewnia dużo kontrolować kształt XML generowane na podstawie wyników kwerendy.Kwerendy trybu AUTO są przydatne, jeśli chcesz wygenerować proste hierarchii.Jednak Using EXPLICIT Mode i Za pomocą trybu ścieżka zapewniają większą kontrolę i elastyczność przy podejmowaniu decyzji kształt 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 określono opcjonalne opcję elementów w klauzula FOR XML.

Hierarchia XML zagnieżdżenia elementów w wynikowym pliku XML 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ślane w klauzula SELECT.Po pierwsze, pierwsza od lewej tabela, która jest identyfikowana formularze górnego elementu w wynikowym dokumencie XML.Z drugiej tabela po lewej stronie, identyfikowane za pomocą kolumn w instrukcja SELECT, stanowi podelement w górnym element i tak dalej.

Jeśli nazwy kolumn wymienionych w klauzula SELECT pochodzą z tabela, która już jest identyfikowany przez uprzednio określonych kolumn w klauzula SELECT, kolumna jest dodawana jako atrybut elementu już utworzone, zamiast otwierać nowy poziom hierarchii.Jeśli określono opcję elementów, kolumna zostanie dodany jako atrybut.

Na przykład można 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>
...

Należy uwzględnić następujące metody w klauzula SELECT:

  • IDKlienta odwołuje się do tabela Cust.Dlatego też <Cust> element jest tworzony i identyfikator klienta zostanie dodany jako atrybut.

  • Następnych trzech kolumn, OrderHeader.CustomerID, OrderHeader.SaleOrderID i OrderHeader.Status, odwoływać się do tabela OrderHeader.Dlatego też <OrderHeader> element zostanie dodany jako podelement z <Cust> element i trzy kolumny są dodawane jako atrybuty <OrderHeader>.

  • Następnie kolumna Cust.CustomerType odwołuje ponownie tabela Cust, które już był identyfikowany przez 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 tabel.Następujące aliasy są wyświetlane jako nazwy odpowiedniego elementu.

  • Klauzula ORDER BY jest wymagany do grupowania wszystkich obiektów podrzędnych w ramach jednego nadrzędnego.

Ta kwerenda jest podobna do poprzedniego, z wyjątkiem klauzula SELECT określa kolumny w tabela OrderHeader przed kolumn w tabela Cust.Dlatego pierwszy <OrderHeader> element jest tworzony i następnie <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>
...

Jeśli opcja elementów jest dodawana w klauzula FOR XML, zwracany jest zorientowane 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 wartości Identyfikator klienta są porównywane z jednego wiersza do następnego przy tworzeniu <Cust> elementy, ponieważ identyfikator klienta jest klucz podstawowy tabela. Jeżeli identyfikator klienta nie jest rozpoznawany jako klucz podstawowy dla tabela, wszystkie wartości kolumna (identyfikator klienta, CustomerType w tej kwerendzie) są porównywane z jednego wiersza do następnego.Jeśli są różne wartości, nowy <Cust> element zostanie dodany do pliku XML.

Podczas porównywania wartości te kolumna, jeśli dowolne z kolumn, które mają być porównywane są typu tekst, ntext, obraz, or XML, FOR XML zakłada, że wartości są różne i nie porównaniu, mimo że mogą one być takie same.Dzieje się tak, ponieważ porównywanie dużych obiektów nie jest obsługiwana.Elementy są dodawane do wyników dla każdego wiersza, zaznaczony.Uwaga tej kolumny (n)varchar(max) and varbinary(max) są porównywane.

Kolumnę w klauzula SELECT nie może być skojarzone z żadnym z tabel określonych w klauzula FROM, jak przypadek agregacja kolumnę lub kolumna obliczana kolumny jest dodawany w dokumencie XML w maksymalnym poziom zagnieżdżenia w miejscu, przypadek napotkania się na liście.Jeśli takiej kolumna jest wyświetlany jako pierwszą kolumna w klauzula SELECT, kolumna zostanie dodany do elementu najwyższego.

Jeżeli 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, w wierszach są zwracane przez aparat kwerend.

W tej sekcji

Więcej informacji o trybie AUTO można znaleźć w następujących tematach:

See Also

Reference

Other Resources