XML İÇİN (SQL Server)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Sorgu SELECT sonuçları satır kümesi olarak döndürür. FOR XML yan tümcesini sorguda belirterek, bir SQL sorgusunun biçimsel sonuçlarını isteğe bağlı olarak XML olarak alabilirsiniz. FOR XML yan tümcesi üst düzey sorgularda ve alt sorgularda kullanılabilir. Üst düzey FOR XML yan tümcesi yalnızca SELECT ifadesinde kullanılabilir. Alt sorgularda, FOR XML, INSERT, UPDATE ve DELETE deyimlerinde kullanılabilir. FOR XML atama deyimlerinde de kullanılabilir.

Yan FOR XML tümcesinde şu modlardan birini belirtirsiniz:

  • RAW
  • AUTO
  • EXPLICIT
  • PATH

RAW modu, <row> deyimi tarafından döndürülen satır kümesindeki her satır için tek bir SELECT öğesi oluşturur. İç içe sorgular yazarak XML hiyerarşisi FOR XML oluşturabilirsiniz.

AUTO modu, SELECT deyiminin nasıl belirtildiğine dayanan buluşsal yöntemleri kullanarak ortaya çıkan XML'de iç içe yapı oluşturur. Oluşturulan XML'nin şekli üzerinde en az denetime sahipsiniz. İç içe FOR XML sorguları, AUTO modu buluşsal yöntemlerinin oluşturduğu XML yapısının ötesinde XML hiyerarşisi oluşturacak şekilde yazılabilir.

Mod, EXPLICIT XML'nin şekli üzerinde daha fazla denetime olanak tanır. XML'nin şekline karar verirken istediğiniz zaman öznitelikleri ve öğeleri karıştırabilirsiniz. Sorgu yürütme nedeniyle oluşturulan sonuçta elde edilen satır kümesi için belirli bir biçim gerektirir. Bu satır kümesi biçimi daha sonra XML şekline eşlenir. EXPLICIT modunun gücü; öznitelikleri ve öğeleri istenildiği gibi karıştırabilmesi, sarmalayıcılar ve iç içe geçmiş karmaşık özellikler oluşturabilmesi, boşlukla ayrılmış değerler (örneğin, OrderID özniteliği sipariş kimliği değerlerinin bir listesini içerebilir) ve karma içerik üretebilmesidir.

Ancak, EXPLICIT modu sorgularını yazmak zahmetli olabilir. Hiyerarşileri oluşturmak için FOR XML modu yerine, iç içe FOR XML RAW, AUTO veya PATH mod sorguları yazmak ve TYPE yönergesini kullanmak gibi bazı yeni EXPLICIT özelliklerinden yararlanabilirsiniz. İç içe FOR XML sorguları, EXPLICIT modunu kullanarak oluşturabileceğiniz her türlü XML'yi üretebilir. Daha fazla bilgi için bkz. İç içe FOR XML sorgularını kullanma ve FOR XML sorgularında TYPE yönergesi.

PATH modu, iç içe geçmiş FOR XML sorgulama özelliğiyle birlikte, EXPLICIT modunun esnekliğini daha basit bir şekilde sağlar.

Bu modlar yalnızca ayarlandıkları sorgunun yürütülmesi için geçerlidir. Bunlar, sonraki sorguların sonuçlarını etkilemez.

FOR XML ifadesiyle kullanılan hiçbir seçim için FOR BROWSE geçerli değildir.

Örnekler

Aşağıdaki SELECT ifade, Sales.Customer veritabanındaki Sales.SalesOrderHeader ve AdventureWorks2025 tablolarından bilgileri alır. Bu sorgu, AUTO yan tümcesinde FOR XML modunu belirtir:

Note

Azure SQL Veritabanı'te ve Microsoft Fabric'teki SQL veritabanında bu USE statement mevcut değildir. Bunun yerine, doğrudan hedef veritabanına bağlanın ve kod örneğinin geri kalanını çalıştırın.

USE AdventureWorks2022;
GO

SELECT Cust.CustomerID,
    OrderHeader.CustomerID,
    OrderHeader.SalesOrderID,
    OrderHeader.STATUS
FROM Sales.Customer Cust
INNER JOIN Sales.SalesOrderHeader OrderHeader
    ON Cust.CustomerID = OrderHeader.CustomerID
FOR XML AUTO;

FOR XML yan tümcesi ve sunucu adları

SELECT yan tümcesi içeren bir FOR XML deyimi sorguda dört parçalı bir ad belirttiğinde, sorgu yerel bilgisayarda yürütüldüğünde ortaya çıkan XML belgesinde sunucu adı döndürülmez. Ancak, sorgu bir ağ sunucusunda yürütülürken sunucu adı dört parçalı ad olarak döndürülür.

Örneğin, şu sorguyu göz önünde bulundurun:

SELECT TOP 1 LastName
FROM ServerName.AdventureWorks2022.Person.Person
FOR XML AUTO;

Yerel sunucu: Yerel sunucu olduğunda ServerName , sorgu aşağıdaki metni döndürür:

<AdventureWorks2022.Person.Person LastName="Achong" />

Ağ sunucusu: Bir ağ sunucusu olduğunda ServerName , sorgu aşağıdaki metni döndürür:

<ServerName.AdventureWorks2022.Person.Person LastName="Achong" />

Belirsizlikten kaçının: Bu diğer ad belirtilerek bu olası belirsizlik önlenebilir:

SELECT TOP 1 LastName
FROM ServerName.AdventureWorks2022.Person.Person x
FOR XML AUTO;

Şimdi kesinleştirilmiş sorgu aşağıdaki metni döndürür:

<x LastName="Achong"/>