Examples: Using AUTO Mode
Poniższe przykłady ilustrują trybu AUTO.Wiele z tych kwerend są określone przed instrukcje dokumentów XML, które są przechowywane kolumna instrukcji tabela ProductModel produkcji roweru.Aby uzyskać więcej informacji na temat instrukcji XML zobacz xml Data Type Representation in the AdventureWorks Database.
Przykład: Trwa pobieranie odbiorcy, zamówienia i kolejność szczegółowych informacji o
Ta kwerenda pobiera odbiorcy, zamówienia i informacje szczegółowe zamówienia dla konkretnego klienta.
SELECT Cust.CustomerID,
OrderHeader.CustomerID,
OrderHeader.SalesOrderID,
Detail.SalesOrderID, Detail.LineTotal,Detail.ProductID,
Product.Name,
Detail.OrderQty
FROM Sales.Customer Cust,
Sales.SalesOrderHeader OrderHeader,
Sales.SalesOrderDetail Detail,
Production.Product Product
WHERE Cust.CustomerID = OrderHeader.CustomerID
AND OrderHeader.SalesOrderID = Detail.SalesOrderID
AND Detail.ProductID = Product.ProductID
AND (Cust.CustomerID=117 or Cust.CustomerID=442)
ORDER BY OrderHeader.CustomerID,
OrderHeader.SalesOrderID
FOR XML AUTO
Ponieważ kwerendy identyfikuje aliasy tabela Cust, OrderHeader, szczegóły i produktu, odpowiadające im elementy są generowane przez tryb automatycznego ustawiania.Ponownie kolejność, w której tabele są identyfikowane za pomocą kolumn określonych w klauzula SELECT określa hierarchię z tych elementów.
To jest wynik częściowy.
<Cust CustomerID="117">
<OrderHeader CustomerID="117" SalesOrderID="43660">
<Detail SalesOrderID="43660" LineTotal="874.794000" ProductID="758" OrderQty="1">
<Product Name="Road-450 Red, 52" />
</Detail>
<Detail SalesOrderID="43660" LineTotal="419.458900" ProductID="762" OrderQty="1">
<Product Name="Road-650 Red, 44" />
</Detail>
</OrderHeader>
<OrderHeader CustomerID="117" SalesOrderID="47660">
<Detail SalesOrderID="47660" LineTotal="469.794000" ProductID="765" OrderQty="1">
<Product Name="Road-650 Black, 58" />
</Detail>
</OrderHeader>
<OrderHeader CustomerID="117" SalesOrderID="49857">
<Detail SalesOrderID="49857" LineTotal="44.994000" ProductID="852" OrderQty="1">
<Product Name="Women's Tights, S" />
</Detail>
</OrderHeader>
...
</Cust>
Przykład: Określanie GROUP BY i funkcje agregujące
Następująca kwerenda zwraca poszczególnych klientów identyfikatory oraz liczbę zamówień, które jest żądana przez odbiorcę.
SELECT I.CustomerID, count(*) as NoOfOrders
from Sales.Individual I,Sales.SalesOrderHeader SOH
WHERE I.CustomerID = SOH.CustomerID
GROUP BY I.CustomerID
FOR XML AUTO
Jest to wynik częściowy:
<I CustomerID="11000" NoOfOrders="3" />
<I CustomerID="11001" NoOfOrders="3" />
...
Przykład: Określanie kolumny obliczane w trybie AUTO
Ta kwerenda zwraca nazwy klientów indywidualnych są połączone i informacje o zamówieniach.Ponieważ kolumna obliczana jest przypisany do poziom wewnętrznego napotkał na tym etapie <SOH> element w tym przykładzie. Nazwy klientów są połączone są dodawane jako atrybuty <SOH> element w wyniku.
select C.FirstName + ' ' + C.LastName as Name,
SOH.SalesOrderID
from Sales.Individual I, Person.Contact C,
Sales.SalesOrderHeader SOH
where I.ContactID = C.ContactID
AND I.CustomerID = SOH.CustomerID
FOR XML AUTO
Jest to wynik częściowy:
<SOH Name="David Robinett" SalesOrderID="53647" />
<SOH Name="Rebecca Robinson" SalesOrderID="72188" />
Aby pobrać <IndividualCustomer> elementy mające Nazwa ponownie zapisywane, tak atrybut, który zawiera informacje nagłówka każdego zamówienia sprzedaży, jak podelement, kwerenda jest przechowywały przy użyciu wybierz podrzędnego. Wybierz wewnętrzną tworzy przejściowy IndividualCustomer tabela z kolumna obliczana, która zawiera nazwy poszczególnych odbiorców.Tabela ta jest następnie dołączony do SalesOrderHeader tabeli w celu uzyskania wyniku.
Należy zauważyć, że tabela Sales.Individual przechowuje informacje o poszczególnych klientów, w tym wartości ContactID dla tego klienta.To ContactID jest następnie używana do wyszukiwania nazwy kontaktu z tabela Person.Contact.
SELECT IndividualCustomer.Name, SOH.SalesOrderID
FROM (SELECT FirstName+ ' '+LastName as Name, I.CustomerID
FROM Sales.Individual I, Person.Contact C
WHERE I.ContactID = C.ContactID) IndividualCustomer
left outer join Sales.SalesOrderHeader SOH
ON IndividualCustomer.CustomerID = SOH.CustomerID
ORDER BY IndividualCustomer.CustomerID, SOH.CustomerID
FOR XML AUTO
Jest to wynik częściowy:
<IndividualCustomer Name="Jon Yang">
<SOH SalesOrderID="43793" />
<SOH SalesOrderID="51522" />
<SOH SalesOrderID="57418" />
</IndividualCustomer>
...
...
Przykład: Zwracanie danych binarnych
Ta kwerenda zwraca zdjęcie pracownika z Pracowników tabela.Fotografia is an obraz kolumnaPracowników tabela.Domyślnie tryb AUTO zwraca dane binarne odwołanie, które jest względny adres URL do wirtualnego katalogu głównego w bazie danych, gdy kwerenda jest wykonywana.The EmployeeID klucz atrybut must be specified to identify the image.Pobierania odwołanie do obrazu, jak pokazano w poniższym przykładzie, klucz podstawowy tabela musi być określona w klauzula SELECT w celu jego jednoznacznej identyfikacji wiersza.
SELECT ProductPhotoID, ThumbNailPhoto
FROM Production.ProductPhoto
WHERE ProductPhotoID=70
FOR XML AUTO
Oto wynik:
-- result
<Production.ProductPhoto
ProductPhotoID="70"
ThumbNailPhoto= "dbobject/Production.ProductPhoto[@ProductPhotoID='70']/@ThumbNailPhoto" />
Tej samej kwerendy jest wykonywany przy użyciu opcji BINARY BASE64.Kwerenda zwraca dane binarne w formacie algorytmem Base64.
SELECT ProductPhotoID, ThumbNailPhoto
FROM Production.ProductPhoto
WHERE ProductPhotoID=70
FOR XML AUTO, BINARY BASE64
Oto wynik:
-- result
<Production.ProductPhoto ProductPhotoID="70" ThumbNailPhoto="Base64 encoded photo" />
Domyślnie, gdy używany jest tryb AUTO do pobierania danych binarnych, odwołanie do względny adres URL do wirtualnego katalogu głównego z bazy danych, w której wykonano kwerendę zostaną zwrócone zamiast danych binarnych.Spowoduje to występować, jeśli nie określono opcji BINARY BASE64.
Gdy tryb AUTO zwraca odwołanie adres URL do dane binarne w przypadek - niewrażliwe baz danych, których nazwy tabela lub kolumna określone w kwerendzie nie pasuje do tabela lub nazwa kolumna w bazie danych, kwerendy jest wykonywany.Jednak przypadek zwracane w odwołaniu nie będą spójne.Na przykład:
SELECT PRODUCTPHOTOID, THUMBNAILPHOTO
FROM Production.PRODUCTPHOTO
WHERE PRODUCTPHOTOID=70
FOR XML AUTO
Oto wynik:
<Production.PRODUCTPHOTO
PRODUCTPHOTOID="70"
THUMBNAILPHOTO= "dbobject/Production.PRODUCTPHOTO[@ProductPhotoID='70']/@ThumbNailPhoto" />
Może to być problem, zwłaszcza w sytuacji, kiedy dbobject kwerendy są wykonywane przed przypadek poufnych bazy danych.Aby tego uniknąć, wielkości liter w nazwie tabela lub kolumna, określoną w oknie kwerendy powinna odpowiadać wielkości liter w nazwie tabela lub kolumna w bazie danych.
Przykład: Opis kodowania
W tym przykładzie przedstawiono różne kodowanie, które występuje w wyniku.
Utwórz w tej tabela:
CREATE TABLE [Special Chars] (Col1 char(1) primary key, [Col#&2] varbinary(50))
W tabela, należy dodać następujące dane:
INSERT INTO [Special Chars] values ('&', 0x20)
INSERT INTO [Special Chars] values ('#', 0x20)
Ta kwerenda zwraca dane z tabela.Określono tryb automatycznego ustawiania XML do sprzedaży.Dane binarne są zwracane jako odwołanie.
SELECT * FROM [Special Chars] FOR XML AUTO
Oto wynik:
<Special_x0020_Chars
Col1="#"
Col_x0023__x0026_2="dbobject/Special_x0020_Chars[@Col1='#']/@Col_x0023__x0026_2"
/>
<Special_x0020_Chars
Col1="&"
Col_x0023__x0026_2="dbobject/Special_x0020_Chars[@Col1='&']/@Col_x0023__x0026_2"
/>
Jest to proces kodowania znaków specjalnych w wyniku:
W wyniku kwerendy znaków specjalnych XML i adres URL w nazwach elementów i atrybut, które są zwracane są kodowane przy użyciu wartości szesnastkowej odpowiedni znak Unicode.W wyniku poprzedniej, nazwa elementu <Special Chars> są zwracane jako <Special_x0020_Chars>. Nazwa atrybut <Col#&2> są zwracane jako <Col_x0023__x0026_2>. XML i adres URL znaki specjalne są kodowane.
Jeśli wartości elementów lub atrybut zawiera dowolne jednostki pięciu znaków XML standardowe ("," ", <, >, a &), te znaki specjalne XML są zawsze zakodowane przy użyciu kodowanie znaku XML. W wyniku poprzedniej, wartość & w wartości atrybut <Col1> są kodowane jako &.Jednak # character pozostaje #, ponieważ jest nieprawidłowym znakiem XML i nie XML znak specjalny.
Jeśli wartości elementów lub atrybutów zawierają wszystkie adresu URL znaki specjalne, które mają specjalne znaczenie w adresie URL, są kodowane tylko w wartość adresu URL DBOBJECT i są kodowane tylko wtedy, gdy znak specjalny jest częścią nazwy tabela lub kolumna.W wyniku znak #, który jest częścią nazwy tabela Odstęp dla kolumny #&2 są kodowane jako _x0023_ w adresie URL DBOJBECT.