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ı
FOR XML (SQL Server)bölümünde açıklandığı gibi, AUTO modu sorgu sonuçlarını iç içe XML öğeleri olarak döndürür. Bu, sorgu sonucundan oluşturulan XML'nin şekli üzerinde fazla denetim sağlamaz. Basit hiyerarşiler oluşturmak istiyorsanız AUTO modu sorguları kullanışlıdır. Ancak, FOR XML ile AÇıK Modu Kullan ve FOR XML ile PATH Modu'nu kullanma sorgu sonucundan XML'nin şekline karar verirken daha fazla denetim ve esneklik sağlar.
SELECT yan tümcesinde en az bir sütunun listelendiği FROM yan tümcesindeki her tablo bir XML öğesi olarak temsil edilir. İSTEĞe bağlı ELEMENTS seçeneği FOR XML yan tümcesinde belirtilmişse, SELECT yan tümcesinde listelenen sütunlar özniteliklere veya alt öğelere eşlenir.
Sonuçta elde edilen XML'de öğelerin iç içe yerleştirilmiş olduğu XML hiyerarşisi, SELECT yan tümcesinde belirtilen sütunlar tarafından tanımlanan tabloların sırasını temel alır. Bu nedenle, SELECT yan tümcesinde sütun adlarının belirtildiği sıra önemlidir. Tanımlanan en soldaki ilk tablo, sonuçta elde edilen XML belgesindeki en üst öğeyi oluşturur. SELECT deyimindeki sütunlar tarafından tanımlanan en soldaki ikinci tablo, üst öğe içinde bir alt öğe oluşturur, vb.
SELECT yan tümcesinde listelenen bir sütun adı, SELECT yan tümcesinde önceden belirtilen bir sütun tarafından zaten tanımlanmış bir tablodan geliyorsa, sütun yeni bir hiyerarşi düzeyi açmak yerine önceden oluşturulmuş öğenin özniteliği olarak eklenir. ELEMENTS seçeneği belirtilirse, sütun öznitelik olarak eklenir.
Örneğin, şu sorguyu yürütür:
SELECT Cust.CustomerID,
OrderHeader.CustomerID,
OrderHeader.SalesOrderID,
OrderHeader.Status,
Cust.CustomerType
FROM Sales.Customer Cust, Sales.SalesOrderHeader OrderHeader
WHERE Cust.CustomerID = OrderHeader.CustomerID
ORDER BY Cust.CustomerID
FOR XML AUTO;
Kısmi sonuç şu şekildedir:
<Cust CustomerID="1" CustomerType="S">
<OrderHeader CustomerID="1" SalesOrderID="43860" Status="5" />
<OrderHeader CustomerID="1" SalesOrderID="44501" Status="5" />
<OrderHeader CustomerID="1" SalesOrderID="45283" Status="5" />
<OrderHeader CustomerID="1" SalesOrderID="46042" Status="5" />
</Cust>
...
SELECT yan tümcesinde aşağıdakilere dikkat edin:
CustomerID, Cust tablosunu referans alır. Bu nedenle, bir
<Cust>öğesi oluşturulur ve CustomerID özniteliği olarak eklenir.Sonraki üç sütun olan OrderHeader.CustomerID, OrderHeader.SaleOrderID ve OrderHeader.Status, OrderHeader tablosuna başvurur. Bu nedenle, bir
<OrderHeader>öğesi<Cust>öğesinin alt öğesi olarak eklenir ve üç sütun<OrderHeader>özniteliği olarak eklenir.Ardından, Cust.CustomerType sütunu yeniden Cust.CustomerID sütunu tarafından zaten tanımlanmış olan Cust tablosuna başvurur. Bu nedenle, yeni bir öğe oluşturulmaz. Bunun yerine, CustomerType özniteliği daha önce oluşturulmuş
<Cust>öğesine eklenir.Sorgu, tablo adları için diğer adları belirtir. Bu diğer adlar karşılık gelen öğe adları gibi görünür.
ORDER BY, tüm alt öğeleri tek bir üst öğe altında gruplandırmak için gereklidir.
Select yan tümcesi Cust tablosundaki sütunlardan önce OrderHeader tablosundaki sütunları belirtmesi dışında, bu sorgu öncekine benzer. Bu nedenle, önce <OrderHeader> öğesi oluşturulur ve ardından <Cust> alt öğesi eklenir.
select OrderHeader.CustomerID,
OrderHeader.SalesOrderID,
OrderHeader.Status,
Cust.CustomerID,
Cust.CustomerType
from Sales.Customer Cust, Sales.SalesOrderHeader OrderHeader
where Cust.CustomerID = OrderHeader.CustomerID
for xml auto;
Kısmi sonuç şu şekildedir:
<OrderHeader CustomerID="1" SalesOrderID="43860" Status="5">
<Cust CustomerID="1" CustomerType="S" />
</OrderHeader>
...
FOR XML yan tümcesine ELEMENTS seçeneği eklenirse, öğe merkezli XML döndürülür.
SELECT Cust.CustomerID,
OrderHeader.CustomerID,
OrderHeader.SalesOrderID,
OrderHeader.Status,
Cust.CustomerType
FROM Sales.Customer Cust, Sales.SalesOrderHeader OrderHeader
WHERE Cust.CustomerID = OrderHeader.CustomerID
ORDER BY Cust.CustomerID
FOR XML AUTO, ELEMENTS
Kısmi sonuç şu şekildedir:
<Cust>
<CustomerID>1</CustomerID>
<CustomerType>S</CustomerType>
<OrderHeader>
<CustomerID>1</CustomerID>
<SalesOrderID>43860</SalesOrderID>
<Status>5</Status>
</OrderHeader>
...
</Cust>
...
Bu sorguda CustomerID değerleri, tablonun birincil anahtarı olduğundan <Cust> öğelerini oluştururken bir satırdan diğerine karşılaştırılır. CustomerID, tablonun birincil anahtarı olarak tanımlanmazsa, tüm sütun değerleri (bu sorgudaki CustomerID, CustomerType) bir satırdan diğerine karşılaştırılır. Değerler farklıysa, XML'ye yeni bir <Cust> öğesi eklenir.
Bu sütun değerleri karşılaştırılırken, karşılaştırılacak sütunlardan herhangi biri metin, ntext, resimveya xmltüründeyse, FOR XML değerlerin farklı olduğunu ve karşılaştırılmadığını varsayar. Bunun nedeni büyük nesneleri karşılaştırmanın desteklenmemiş olmasıdır. Öğeler, seçilen her satırın sonucuna eklenir. (n)varchar(max) ve varbinary(max) sütunları karşılaştırılır.
SELECT yan tümcesindeki bir sütun, toplama sütunu veya hesaplanan sütunda olduğu gibi FROM yan tümcesinde tanımlanan tablolardan herhangi biriyle ilişkilendirilemiyorsa, sütun XML belgesine, listede karşılaşıldığında en derin iç içe yerleştirme düzeyinde eklenir. Böyle bir sütun SELECT yan tümcesindeki ilk sütun olarak görünüyorsa, sütun üst öğeye eklenir.
SELECT yan tümcesinde yıldız işareti (*) joker karakteri belirtilirse, iç içe yerleştirme, satırların sorgu motoru tarafından döndürülme sırasına göre daha önce açıklandığı şekilde belirlenir.
Sonraki adımlar
Aşağıdaki makaleler AUTO modu hakkında daha fazla bilgi sağlar:
Örnekleri: AUTO Mode Kullanma
Ayrıca bkz.
- SEÇ (Transact-SQL)
- SQL Server için XML