Przykłady: Używanie trybu automatycznego
Poniższe przykłady ilustrują trybu automatycznego.Wiele z tych kwerend są określone przeciwko rowerów wytwarzania instrukcje dokumenty XML, które są przechowywane kolumna instrukcje w tabela ProductModel.Aby uzyskać więcej informacji o instrukcji XML, zobacz XML reprezentacji typu danych w bazie danych AdventureWorks2008R2.
Przykład: Pobieranie odbiorcy, zamówienia i szczegółowe informacje o zamówieniu
Ta kwerenda pobiera odbiorcy, zamówienia i szczegółowe informacje o zamówieniu dla określonego nabywcy.
USE AdventureWorks2008R2;
GO
SELECT Cust.CustomerID,
OrderHeader.CustomerID,
OrderHeader.SalesOrderID,
Detail.SalesOrderID, Detail.LineTotal, Detail.ProductID,
Product.Name,
Detail.OrderQty
FROM Sales.Customer AS Cust
INNER JOIN Sales.SalesOrderHeader AS OrderHeader
ON Cust.CustomerID = OrderHeader.CustomerID
INNER JOIN Sales.SalesOrderDetail AS Detail
ON OrderHeader.SalesOrderID = Detail.SalesOrderID
INNER JOIN Production.Product AS Product
ON Product.ProductID = Detail.ProductID
WHERE Cust.CustomerID IN (29672, 29734)
ORDER BY OrderHeader.CustomerID,
OrderHeader.SalesOrderID
FOR XML AUTO;
Ponieważ kwerenda identyfikuje, Cust, OrderHeader, Detail, i Product Aliasy tabela, odpowiadające elementy są generowane przez AUTO tryb.Ponownie, kolejność, w której tabele są identyfikowane przez kolumn określona w SELECT klauzula określają hierarchię tych elementów.
Jest to wynik częściowy.
<Cust CustomerID="29672">
<OrderHeader CustomerID="29672" 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="29672" SalesOrderID="47660">
<Detail SalesOrderID="47660" LineTotal="469.794000" ProductID="765" OrderQty="1">
<Product Name="Road-650 Black, 58" />
</Detail>
</OrderHeader>
<OrderHeader CustomerID="29672" 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 Grupuj według i wartość zagregowana funkcje
Następująca kwerenda zwraca poszczególnych nabywców, identyfikatorów i liczbę zamówień, które klient zażądał.
USE AdventureWorks2008R2;
GO
SELECT C.CustomerID, COUNT(*) AS NoOfOrders
FROM Sales.Customer AS C
INNER JOIN Sales.SalesOrderHeader AS SOH
On C.CustomerID = SOH.CustomerID
GROUP BY C.CustomerID
FOR XML AUTO;This is the partial result:
<I CustomerID="11000" NoOfOrders="3" />
<I CustomerID="11001" NoOfOrders="3" />
...
Przykład: Określanie kolumny obliczane w trybie AUTOMATYCZNYM
Ta kwerenda zwraca nazwy uzyskiwanej poszczególnych nabywców i informacje o zamówieniach.Ponieważ kolumna obliczana jest przypisany do poziom wewnętrzne napotkanych w tym punkcie <SOH> element w tym przykładzie.Nazwy klientów są połączone są dodawane jako atrybuty <SOH> elementu w wyniku.
USE AdventureWorks2008R2;
GO
SELECT P.FirstName + ' ' + P.LastName AS Name,
SOH.SalesOrderID
FROM Sales.Customer AS C
INNER JOIN Sales.SalesOrderHeader AS SOH
ON C.CustomerID = SOH.CustomerID
INNER JOIN Person.Person AS P
ON P.BusinessEntityID = C.PersonID
FOR XML AUTO;
Jest to wynik częściowy:
<SOH Name="Jon Yang" SalesOrderID="43793" />
<SOH Name="Eugene Huang" SalesOrderID="43767" />
Aby pobrać <IndividualCustomer> elementy mające Name atrybut zawierający każdej informacji nagłówka zamówienia sprzedaży jako podelement, kwerenda jest przebudowywany przy użyciu wybierz podrzędny.Wybierz wewnętrzną tworzy tymczasowy IndividualCustomer Tabela z kolumna obliczana zawierającego nazwy klientów indywidualnych.Tabela ta jest następnie przyłączony do SalesOrderHeader tabeli w celu uzyskania wyników.
Należy zauważyć, że Sales.Customer Tabela przechowuje informacje o poszczególnych nabywców, łącznie z PersonID wartość dla tego nabywcy.To PersonID jest następnie używana do znalezienia nazwę kontaktu z Person.Person tabela.
SELECT IndividualCustomer.Name, SOH.SalesOrderID
FROM (SELECT FirstName+ ' '+LastName AS Name, C.PersonID, C.CustomerID
FROM Sales.Customer AS C, Person.Person AS P
WHERE C.PersonID = P.BusinessEntityID) AS IndividualCustomer
LEFT OUTER JOIN Sales.SalesOrderHeader AS SOH
ON IndividualCustomer.CustomerID = SOH.CustomerID
ORDER BY IndividualCustomer.CustomerID, SOH.CustomerIDFOR 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
This query returns a product photo from the ProductPhoto table.ThumbNailPhoto is an varbinary(max) column in the ProductPhoto table.Domyślnie AUTO Tryb zwraca dane binarne odwołaniem względnym adresem URL do wirtualnego katalogu głównego bazy danych w przypadku gdy kwerenda jest wykonywana.ProductPhotoIDatrybut klucz Musi być określony do identyfikowania obrazu. Pobierania odwołanie, jak pokazano w poniższym przykładzie, klucz podstawowy tabela musi być także określona w SELECT klauzula do jednoznacznego identyfikowania wiersza.
SELECT ProductPhotoID, ThumbNailPhoto
FROM Production.ProductPhoto
WHERE ProductPhotoID=70
FOR XML AUTO;
Jest to wynikiem:
-- result
<Production.ProductPhoto
ProductPhotoID="70"
ThumbNailPhoto= "dbobject/Production.ProductPhoto[@ProductPhotoID='70']/@ThumbNailPhoto" />
Kwerenda jest wykonywana z BINARY BASE64 opcji.Kwerenda zwraca dane binarne w algorytmem base64.
SELECT ProductPhotoID, ThumbNailPhoto
FROM Production.ProductPhoto
WHERE ProductPhotoID=70
FOR XML AUTO, BINARY BASE64;
Jest to wynikiem:
-- result
<Production.ProductPhoto ProductPhotoID="70" ThumbNailPhoto="Base64 encoded photo" />
Domyślnie podczas korzystania z trybu automatycznego pobierania danych binarnych, odniesienie do względny adres URL do wirtualnego katalogu głównego, której wykonano kwerendę bazy danych zostaną zwrócone zamiast danych binarnych.Nastąpi to, jeżeli nie określono opcji BINARY BASE64.
Gdy tryb automatyczny zwraca odwołanie adres URL do danych binarnych w przypadek-niewrażliwe baz danych, gdzie nazwa tabela lub kolumna, określonych w kwerendzie nie pasuje tabela lub kolumna Nazwa bazy danych, wykonuje kwerendę.Jednak przypadek zwracane odwołania nie będą spójne.Na przykład:
SELECT PRODUCTPHOTOID, THUMBNAILPHOTO
FROM Production.PRODUCTPHOTO
WHERE PRODUCTPHOTOID=70
FOR XML AUTO;
Jest to wynikiem:
<Production.PRODUCTPHOTO
PRODUCTPHOTOID="70"
THUMBNAILPHOTO= "dbobject/Production.PRODUCTPHOTO[@ProductPhotoID='70']/@ThumbNailPhoto" />
Może to być problem, szczególnie przypadek, gdy dbobject kwerendy są wykonywane na bazie liter.Aby tego uniknąć, przypadek nazwy tabela lub kolumna określonej w kwerendach powinna odpowiadać przypadek nazwa tabela lub kolumna w bazie danych.
Przykład: Opis kodowania
W tym przykładzie przedstawiono różne metodę kodowania, która występuje w wyniku.
Tworzenie tabela:
CREATE TABLE [Special Chars] (Col1 char(1) primary key, [Col#&2] varbinary(50));
Dodaj poniższe dane do tabela:
INSERT INTO [Special Chars] VALUES ('&', 0x20), ('#', 0x20);
Ta kwerenda zwraca dane z tabela.Określono tryb dla AUTO XML.Dane binarne są zwracane jako odwołanie.
SELECT * FROM [Special Chars] FOR XML AUTO;
Jest to wynikiem:
<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 XML i URL znaków specjalnych w nazwach elementów i atrybut, które są zwracane są kodowane przy użyciu wartości szesnastkowej odpowiedni znak Unicode.W wyniku poprzedniego, nazwa elementu <Special Chars> są zwracane jako <Special_x0020_Chars>.Nazwa atrybut <Col#&2> są zwracane jako <Col_x0023__x0026_2>.XML i URL znaki specjalne są kodowane.
Jeśli wartości elementów lub atrybut zawierać pięć encje znaków standardowych XML ("," ", <, >, i &), te znaki specjalne XML są zawsze kodowane przy użyciu kodowanie znaku XML.W wyniku poprzedniego, wartość & w wartości atrybut <Col1> jest zakodowany jako &.Jednak znaku # pozostaje #, ponieważ jest on nieprawidłowy znak XML i nie XML znak specjalny.
Jeśli wartości elementów lub atrybutów zawierają specjalne znaki adres URL, które mają specjalne znaczenie w adresie URL, są zakodowane w tylko wartość adresu URL DBOBJECT i są kodowane tylko wtedy, gdy znak specjalny jest częścią nazwy tabela lub kolumna.W wyniku znak # jest częścią nazwy tabela Col#&2 jest zakodowany jako x0023 in the DBOJBECT URL.