Aracılığıyla paylaş


Ö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="&amp;"

Col_x0023__x0026_2="dbobject/Special_x0020_Chars[@Col1='&amp;']/@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ış &amp;. 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.

Ayrıca bkz.

Başvuru

for xml ile ham modunu kullanın