Örnekler: auto modunu kullanma
Aşağıdaki örnekler, auto modunda kullanımı göstermektedir. Bu sorguların birçoğu karşı bisiklet üretim yönergeleri ProductModel tablo yönergeleri sütunda depolanan xml belgeleri belirtilir. xml yönergeleri hakkında daha fazla bilgi için bkz: DEL - xml Data Type Representation in the AdventureWorks2008R2 Database.
Örnek: müşteri, sipariş ve sipariş ayrıntı bilgileri alınıyor
Bu sorgu, müşteri, sipariş ve belirli bir müşteri için sipariş ayrıntı bilgileri alır.
USE AdventureWorks2012;
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;
Sorgu tanımladığından, Cust, OrderHeader, Detail, ve Producttablo diğer adları, karşılık gelen elemanları tarafından üretilen AUTOmod. Yine içinde tablolar tanımlanır içinde belirtilen sütun sırasını SELECTyan tümcesi belirlemek, bu öğelerin hiyerarşisini.
Bu kısmi bir sonucudur.
<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>
Örnek: Grupla ve toplama işlevleri belirtme
Aşağıdaki sorgu bireysel müşteri kimlikleri ve müşteri istedi siparişlerin sayısını döndürür.
USE AdventureWorks2012;
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" />
...
Örnek: auto modunda hesaplanmış sütunları belirtme
Bu sorgu, birleştirilmiş tek müşteri adları ve sipariş bilgileri döndürür. Çünkü bu noktada karşılaştı içteki düzeye hesaplanmış bir sütun <SOH> öğe bu örnekte. Birleştirilmiş müşteri adlarının özniteliklerini eklenen <SOH> sonuç öğesi.
USE AdventureWorks2012;
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;
Bu kısmi bir sonucudur:
<SOH Name="Jon Yang" SalesOrderID="43793" />
<SOH Name="Eugene Huang" SalesOrderID="43767" />
Almak için <IndividualCustomer> sahip öğeleri Namealt öğesi, sorgu her satış siparişi başlığındaki bilgiler içeren öznitelik yeniden kullanarak bir alt seçin. İç seçin geçici oluşturur IndividualCustomerile bireysel müşterilerin adlarını içeren hesaplanan sütun tablo. Bu tabloyu daha sonra katıldığı SalesOrderHeadersonuç elde etmek için tablo.
Dikkat Sales.Customertablo, bireysel müşteri bilgilerini depolar dahil PersonIDdeğer o müşterinin. Bu PersonIDsonra gelen kişi adını bulmak için kullanılan Person.Persontablosu.
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;
Bu kısmi bir sonucudur:
<IndividualCustomer Name="Jon Yang">
<SOH SalesOrderID="43793" />
<SOH SalesOrderID="51522" />
<SOH SalesOrderID="57418" />
</IndividualCustomer>
...
...
Örnek: ikili veri döndürme
Bu sorgu döndürür bir ürün fotoğrafı ProductPhototablosu. ThumbNailPhotoolan bir varbinary(max)sütununda ProductPhototablosu. Varsayılan olarak, AUTOdöner için ikili veri nereye sorgu yürütülür veritabanı sanal kök dizinine göreli bir url olan başvuru. ProductPhotoIDResmi belirlemek için anahtar özniteliği belirtilmelidir. Bu örnekte gösterildiği gibi bir resim başvurusu alma olarak, tablonun birincil anahtarı da belirtilmelidir SELECTsatır benzersiz olarak tanımlamak için yan.
SELECT ProductPhotoID, ThumbNailPhoto
FROM Production.ProductPhoto
WHERE ProductPhotoID=70
FOR XML AUTO;
Sonuç şudur:
-- result
<Production.ProductPhoto
ProductPhotoID="70"
ThumbNailPhoto= "dbobject/Production.ProductPhoto[@ProductPhotoID='70']/@ThumbNailPhoto" />
Aynı sorgu ile yürütülen BINARY BASE64seçeneği. Sorgu ikili veri Base64 ile kodlanmış biçiminde döndürür.
SELECT ProductPhotoID, ThumbNailPhoto
FROM Production.ProductPhoto
WHERE ProductPhotoID=70
FOR XML AUTO, BINARY BASE64;
Sonuç şudur:
-- result
<Production.ProductPhoto ProductPhotoID="70" ThumbNailPhoto="Base64 encoded photo" />
İkili veri almak için auto modunu kullandığınızda varsayılan olarak göreli bir url sorgu nerede yürütüldü veritabanı sanal kök başvuru yerine ikili veri döndürdü. BINARY BASE64 seçeneği belirtilmemişse, bu ortaya çıkar.
Ne zaman auto modu ikili verileri için bir url başvurusu burada sorguda belirtilen bir tablo veya sütun tablo eşleşmiyor veya sütun adı veritabanı sorgu yürütür duyarlı veritabanları döndürür. Ancak, başvuru döndürülen durum tutarlı olmayacak. Örneğin:
SELECT PRODUCTPHOTOID, THUMBNAILPHOTO
FROM Production.PRODUCTPHOTO
WHERE PRODUCTPHOTOID=70
FOR XML AUTO;
Sonuç şudur:
<Production.PRODUCTPHOTO
PRODUCTPHOTOID="70"
THUMBNAILPHOTO= "dbobject/Production.PRODUCTPHOTO[@ProductPhotoID='70']/@ThumbNailPhoto" />
Özellikle büyük küçük harf duyarlı bir veritabanıyla dbobject sorguları yürütüldüğünde bu bir sorun olabilir. Bunu önlemek için veritabanında tablo veya sütun adı büyük/küçük harf sorgularda belirtilen tablo veya sütun adı büyük/küçük harf eşleşmelidir.
Örnek: kodlama anlama
Bu örnek, çeşitli kodlama, sonuçta ortaya gösterir.
Bu tablo oluşturun:
CREATE TABLE [Special Chars] (Col1 char(1) primary key, [Col#&2] varbinary(50));
Aşağıdaki verileri tabloya ekleyin:
INSERT INTO [Special Chars] VALUES ('&', 0x20), ('#', 0x20);
Bu sorgu, tablo için veri döndürür. for xml auto modu belirtildi. İkili veri bir başvuru döndürülür.
SELECT * FROM [Special Chars] FOR XML AUTO;
Sonuç şudur:
<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"
/>
Bu özel karakterler sonuç kodlama işlemdir:
Sorgu sonucu, özel xml ve url karakterleri döndürülen öğe ve öznitelik karşılık gelen Unicode karakteri onaltılık değeri kullanılarak kodlanır. Önceki sonuç, öğe adından <Special Chars> olarak döndürülen <Special_x0020_Chars>. Öznitelik adı <Col#&2> olarak döndürülen <Col_x0023__x0026_2>. Hem xml hem de url özel karakterler kodlanır.
Beş standart xml karakter varlıkları öğe ya da öznitelik değerlerini içeriyorsa, (', "", <, >, ve &), bu özel xml karakterleri her zaman xml karakter kodlaması kullanılarak kodlanmıştır. Önceki sonuç, değer &özniteliğinin değeri <Col1>olarak kodlanmış &. Ancak, geçersiz xml karakter ve bir özel xml karakter olduğundan #, # karakteri kalır.
Öğe veya öznitelik değerlerini URL'de özel anlamları olan özel url karakterler içeriyorsa, onlar sadece dbobject url değeri kodlanır ve yalnızca özel karakteri bir tablo veya sütun adı bir parçası olduğunda kodlanmıştır. Sonuç, karakter #tablo adını parçası Col#&2olarak kodlanmış _x0023_ in the DBOJBECT URL.