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 örnekte, iç içe AUTO mod sorgusu kullanarak kardeşlerin nasıl üretileceği gösterilmektedir. Böyle bir XML oluşturmanın tek yolu, AÇIK modunu kullanmaktır. Ancak, bu zahmetli olabilir.
Örnek
Bu sorgu, satış siparişi bilgilerini sağlayan XML oluşturur. Buna şunlar dahildir:
Satış siparişi başlık bilgileri,
SalesOrderID,SalesPersonIDveOrderDate.AdventureWorks2025bu bilgileriSalesOrderHeadertablosunda depolar.Satış siparişi ayrıntı bilgileri. Buna sipariş edilen bir veya daha fazla ürün, birim fiyat ve sipariş edilen miktar dahildir. Bu bilgiler
SalesOrderDetailtablosunda depolanır.Satış kişisi bilgileri. Bu, siparişi alan satış temsilcisidir.
SalesPersontablosuSalesPersonIDsağlar. Bu sorguda, satış sorumlusunun adını bulmak için bu tabloyuEmployeetablosuna birleştirmeniz gerekir.
Aşağıdaki iki ayrı SELECT sorgu, şekilde küçük bir farkla XML oluşturur.
İlk sorgu, <SalesPerson> ve <SalesOrderHeader>'in <SalesOrder>'ye kardeş öğe olarak göründüğü XML'i oluşturur.
SELECT
(SELECT top 2 SalesOrderID, SalesPersonID, CustomerID,
(select top 3 SalesOrderID, ProductID, OrderQty, UnitPrice
from Sales.SalesOrderDetail
WHERE SalesOrderDetail.SalesOrderID =
SalesOrderHeader.SalesOrderID
FOR XML AUTO, TYPE)
FROM Sales.SalesOrderHeader
WHERE SalesOrderHeader.SalesOrderID = SalesOrder.SalesOrderID
for xml auto, type),
(SELECT *
FROM (SELECT SalesPersonID, EmployeeID
FROM Sales.SalesPerson, HumanResources.Employee
WHERE SalesPerson.SalesPersonID = Employee.EmployeeID) As
SalesPerson
WHERE SalesPerson.SalesPersonID = SalesOrder.SalesPersonID
FOR XML AUTO, TYPE)
FROM (SELECT SalesOrderHeader.SalesOrderID, SalesOrderHeader.SalesPersonID
FROM Sales.SalesOrderHeader, Sales.SalesPerson
WHERE SalesOrderHeader.SalesPersonID = SalesPerson.SalesPersonID
) as SalesOrder
ORDER BY SalesOrder.SalesOrderID
FOR XML AUTO, TYPE;
Önceki sorguda, en dıştaki SELECT deyimi aşağıdakileri yapar:
SalesOrdersatır kümesini,FROMyan tümcesinde belirtilen, sorgular. Sonuç, bir veya daha fazla<SalesOrder>öğesine sahip bir XML'dir.AUTOmodunu veTYPEyönergesini belirtir.AUTOmodu sorgu sonucunu XML'ye dönüştürür veTYPEyönergesi sonucu xml türü olarak döndürür.Virgülle ayrılmış iki iç içe
SELECTdeyimi içerir. İlk iç içe yerleştirilmişSELECT, satış siparişi bilgilerini, başlık ve ayrıntıları alır ve ikinci iç içe yerleştirilmişSELECTdeyimi, satış temsilcisi bilgilerini alır.-
SELECT,SalesOrderIDveSalesPersonIDalanCustomerIDdeyimi, satış siparişi ayrıntı bilgilerini döndüren başka bir iç içeSELECT ... FOR XMLdeyimi (AUTOmodu veTYPEyönergesi ile) içerir.
-
Satış temsilcisi bilgilerini alan SELECT deyimi, SalesPerson yan tümcesinde oluşturulan FROMsatır kümesini sorgular.
FOR XML sorguların çalışması için, FROM yan tümcesinde oluşturulan anonim satır kümesi için bir ad sağlamanız gerekir. Bu durumda, sağlanan ad SalesPersonolur.
Kısmi sonuç şu şekildedir:
<SalesOrder>
<Sales.SalesOrderHeader SalesOrderID="43659" SalesPersonID="279" CustomerID="676">
<Sales.SalesOrderDetail SalesOrderID="43659" ProductID="776" OrderQty="1" UnitPrice="2024.9940" />
<Sales.SalesOrderDetail SalesOrderID="43659" ProductID="777" OrderQty="3" UnitPrice="2024.9940" />
<Sales.SalesOrderDetail SalesOrderID="43659" ProductID="778" OrderQty="1" UnitPrice="2024.9940" />
</Sales.SalesOrderHeader>
<SalesPerson SalesPersonID="279" EmployeeID="279" />
</SalesOrder>
...
Aşağıdaki sorgu, sonuçta elde edilen XML'de <SalesPerson><SalesOrderDetail>eşdüzey olarak görünmesi dışında aynı satış siparişi bilgilerini oluşturur:
<SalesOrder>
<SalesOrderHeader ...>
<SalesOrderDetail .../>
<SalesOrderDetail .../>
...
<SalesPerson .../>
</SalesOrderHeader>
</SalesOrder>
<SalesOrder>
...
</SalesOrder>
Bu sorgudur:
SELECT SalesOrderID, SalesPersonID, CustomerID,
(select top 3 SalesOrderID, ProductID, OrderQty, UnitPrice
from Sales.SalesOrderDetail
WHERE SalesOrderDetail.SalesOrderID = SalesOrderHeader.SalesOrderID
FOR XML AUTO, TYPE),
(SELECT *
FROM (SELECT SalesPersonID, EmployeeID
FROM Sales.SalesPerson, HumanResources.Employee
WHERE SalesPerson.SalesPersonID = Employee.EmployeeID) As SalesPerson
WHERE SalesPerson.SalesPersonID = SalesOrderHeader.SalesPersonID
FOR XML AUTO, TYPE)
FROM Sales.SalesOrderHeader
WHERE SalesOrderID=43659 or SalesOrderID=43660
FOR XML AUTO, TYPE;
Sonuç şu şekildedir:
<Sales.SalesOrderHeader SalesOrderID="43659" SalesPersonID="279" CustomerID="676">
<Sales.SalesOrderDetail SalesOrderID="43659" ProductID="776" OrderQty="1" UnitPrice="2024.9940" />
<Sales.SalesOrderDetail SalesOrderID="43659" ProductID="777" OrderQty="3" UnitPrice="2024.9940" />
<Sales.SalesOrderDetail SalesOrderID="43659" ProductID="778" OrderQty="1" UnitPrice="2024.9940" />
<SalesPerson SalesPersonID="279" EmployeeID="279" />
</Sales.SalesOrderHeader>
<Sales.SalesOrderHeader SalesOrderID="43660" SalesPersonID="279" CustomerID="117">
<Sales.SalesOrderDetail SalesOrderID="43660" ProductID="762" OrderQty="1" UnitPrice="419.4589" />
<Sales.SalesOrderDetail SalesOrderID="43660" ProductID="758" OrderQty="1" UnitPrice="874.7940" />
<SalesPerson SalesPersonID="279" EmployeeID="279" />
</Sales.SalesOrderHeader>
TYPE yönergesi xml türü olarak bir sorgu sonucu döndürdüğünden, çeşitli xml veri türü yöntemlerini kullanarak sonuçta elde edilen XML'yi sorgulayabilirsiniz. Daha fazla bilgi için bkz. xml Veri Türü Yöntemleri. Aşağıdaki sorguda aşağıdakileri not edin:
Önceki sorgu
FROMyan tümcesine eklenir. Sorgu sonucu tablo olarak döndürülür. EklenenXmlColdiğer adına dikkat edin.SELECTyan tümcesi,XmlColyan tümcesinde döndürülenFROM'e karşılık gelen bir XQuery tanımlar.query()veri türünün yöntemi, XQuery'nin belirtilmesinde kullanılır. Daha fazla bilgi için bkz. query() Metodu (xml Veri Türü).SELECT XmlCol.query('<Root> { /* } </Root>') FROM ( SELECT SalesOrderID, SalesPersonID, CustomerID, (select top 3 SalesOrderID, ProductID, OrderQty, UnitPrice from Sales.SalesOrderDetail WHERE SalesOrderDetail.SalesOrderID = SalesOrderHeader.SalesOrderID FOR XML AUTO, TYPE), (SELECT * FROM (SELECT SalesPersonID, EmployeeID FROM Sales.SalesPerson, HumanResources.Employee WHERE SalesPerson.SalesPersonID = Employee.EmployeeID) As SalesPerson WHERE SalesPerson.SalesPersonID = SalesOrderHeader.SalesPersonID FOR XML AUTO, TYPE) FROM Sales.SalesOrderHeader WHERE SalesOrderID='43659' or SalesOrderID='43660' FOR XML AUTO, TYPE ) as T(XmlCol);