Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
Aşağıdaki örneklerde AUTO modunun kullanımı gösterilmektedir. Bu sorguların çoğu, AdventureWorks2025 örnek veritabanındaki ProductModel tablosunun Yönergeler sütununda depolanan bisiklet üretim yönergeleri XML belgeleriyle belirtilir.
Örnek: Müşteri, sipariş ve sipariş ayrıntıları bilgilerini alma
Bu sorgu belirli bir müşterinin müşteri, sipariş ve sipariş ayrıntıları bilgilerini alır.
USE AdventureWorks2022;
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, Cust, OrderHeader, Detail ve Product tablo diğer adlarını tanımladığından, ilgili öğeler AUTO mod tarafından oluşturulur. Yine, SELECT maddesinde belirtilen sütunlar tarafından tabloların tanımlandığı sıra, bu öğelerin hiyerarşisini belirler.
Kısmi sonuç budur.
<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: GROUP BY ve toplama işlevlerini belirtme
Aşağıdaki sorgu tek tek müşteri kimliklerini ve müşterinin istediği sipariş sayısını döndürür.
USE AdventureWorks2022;
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;
Kısmi sonuç şu şekildedir:
<I CustomerID="11000" NoOfOrders="3" />
<I CustomerID="11001" NoOfOrders="3" />
...
Örnek: OTOMATIK modda hesaplanan sütunları belirtme
Bu sorgu, birleştirilmiş tek tek müşteri adlarını ve sipariş bilgilerini döndürür. Hesaplanan sütun, bu noktada karşılaşılan en iç düzeye atandığından, bu örnekteki <SOH> öğesi. Birleştirilmiş müşteri adları, sonuçta <SOH> elementi öznitelikleri olarak eklenir.
USE AdventureWorks2022;
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;
Kısmi sonuç şu şekildedir:
<SOH Name="Jon Yang" SalesOrderID="43793" />
<SOH Name="Eugene Huang" SalesOrderID="43767" />
Bu satış siparişi üst bilgisi bilgilerini alt öğe olarak içeren <IndividualCustomer> özniteliğine sahip Name öğeleri almak için, sorgu bir alt sorgu kullanılarak yeniden yazılır. İç seçim, tek tek müşterilerin adlarını içeren hesaplanan sütuna sahip geçici IndividualCustomer bir tablo oluşturur. Bu tablo daha sonra sonucu elde etmek için SalesOrderHeader tabloya katılır.
Tablo, Sales.Customer müşteriye ait PersonID değeri de dahil olmak üzere, tek tek müşteri bilgilerini depolar. Bu PersonID daha sonra tablodan kişi adını Person.Person bulmak için kullanılır.
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.CustomerID FOR XML AUTO;
Kısmi sonuç şu şekildedir:
<IndividualCustomer Name="Jon Yang">
<SOH SalesOrderID="43793" />
<SOH SalesOrderID="51522" />
<SOH SalesOrderID="57418" />
</IndividualCustomer>
...
Örnek: İkili veri döndürme
Bu sorgu tablodan ProductPhoto bir ürün fotoğrafı döndürür.
ThumbNailPhototablodaki bir ProductPhoto sütunudur. Varsayılan olarak, mod ikili AUTO verilere sorgunun yürütüldüğü veritabanının sanal kökünün göreli URL'si olan bir başvuru döndürür. Görüntüyü ProductPhotoID tanımlamak için anahtar özniteliği belirtilmelidir. Bu örnekte gösterildiği gibi bir görüntü başvurusu alınırken, tablonun birincil anahtarı da SELECT yan tümcesinde belirtilmelidir; böylece bir satır benzersiz olarak tanımlanabilir.
SELECT ProductPhotoID, ThumbNailPhoto
FROM Production.ProductPhoto
WHERE ProductPhotoID = 70
FOR XML AUTO;
Sonuç şu şekildedir:
<Production.ProductPhoto
ProductPhotoID="70"
ThumbNailPhoto= "dbobject/Production.ProductPhoto[@ProductPhotoID='70']/@ThumbNailPhoto" />
Aynı sorgu BINARY BASE64 seçeneğiyle yürütülür. Sorgu, ikili verileri base64 ile kodlanmış biçimde döndürür.
SELECT ProductPhotoID, ThumbNailPhoto
FROM Production.ProductPhoto
WHERE ProductPhotoID = 70
FOR XML AUTO, BINARY BASE64;
Sonuç şu şekildedir:
<Production.ProductPhoto ProductPhotoID="70" ThumbNailPhoto="Base64 encoded photo" />
Varsayılan olarak, ikili verileri almak için AUTO modunu kullandığınızda, ikili veriler yerine sorgunun yürütüldüğü veritabanının sanal kökünün göreli URL'sine başvuru döndürülür. İKILI BASE64 seçeneği belirtilmezse bu durum oluşur.
AUTO modu, sorguda belirtilen tablo veya sütun adının veritabanındaki tablo veya sütun adıyla eşleşmediği büyük/küçük harfe duyarsız veritabanlarında ikili verilere yönelik bir URL referansı döndürdüğünde, sorgu yürütülür. Ancak referansta döndürülen durum tutarlılık göstermeyecektir. Örneğin:
SELECT ProductPhotoID, ThumbnailPhoto
FROM Production.ProductPhoto
WHERE ProductPhotoID=70
FOR XML AUTO;
Sonuç şu şekildedir:
<Production.PRODUCTPHOTO
PRODUCTPHOTOID="70"
THUMBNAILPHOTO= "dbobject/Production.PRODUCTPHOTO[@ProductPhotoID='70']/@ThumbNailPhoto" />
Özellikle büyük/küçük harfe duyarlı bir veritabanında sorgular yürütüldüğünde bu sorun oluşturabilir. Bunu önlemek için, sorgularda belirtilen tablo veya sütun adının durumu, veritabanındaki tablo veya sütun adının durumuyla eşleşmelidir.
Örnek: Kodlamayı anlama
Bu örnek, sonuçta oluşan çeşitli kodlamayı gösterir.
Bu tabloyu oluşturun:
CREATE TABLE [Special Chars] (Col1 char(1) primary key, [Col#&2] varbinary(50));
Tabloya aşağıdaki verileri ekleyin:
INSERT INTO [Special Chars] VALUES ('&', 0x20), ('#', 0x20);
Bu sorgu tablodaki verileri döndürür. FOR XML AUTO modu belirtilir. İkili veriler başvuru olarak döndürülür.
SELECT * FROM [Special Chars] FOR XML AUTO;
Sonuç şu şekildedir:
<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, sonuç olarak özel karakterleri kodlama işlemidir:
Sorgu sonucunda, döndürülen öğe ve öznitelik adlarındaki özel XML ve URL karakterleri, karşılık gelen Unicode karakterinin onaltılık değeri kullanılarak kodlanır. Önceki sonuçta, öğe adı
<Special Chars>olarak<Special_x0020_Chars>döndürülür. Öznitelik adı<Col#&2>olarak<Col_x0023__x0026_2>döndürülür. Hem XML hem de URL özel karakterleri kodlanır.Öğelerin veya özniteliğin değerleri beş standart XML karakter varlığından (', "", <, >ve &) herhangi birini içeriyorsa, bu özel XML karakterleri her zaman XML karakter kodlaması kullanılarak kodlanır. Önceki sonuçta, özniteliğinin
&değerindeki değer<Col1>olarak&kodlanmıştır. Ancak, özel bir XML karakteri değil geçerli bir XML karakteri olduğundan # karakteri #olarak kalır.Öğelerin veya özniteliklerin değerleri URL'de özel anlamı olan özel URL karakterleri içeriyorsa, bunlar yalnızca DBOBJECT URL değerinde kodlanır ve yalnızca özel karakter bir tablo veya sütun adının parçası olduğunda kodlanır. Sonuçta, tablo adının
#parçası olan karakterCol#&2olarak_x0023_ in the DBOJBECT URLkodlanır.