Aracılığıyla paylaş


Örnek: Çalışan bilgilerini alma

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

Bu örnek, her çalışan için bir çalışan kimliği ve çalışan adı sağlar. AdventureWorks2025 Veritabanında employeeID, Çalışan tablosundaki BusinessEntityID sütunundan alınabilir. Çalışan adları Kişi tablosundan alınabilir. BusinessEntityID sütunu tabloları birleştirmek için kullanılabilir.

FOR XML EXPLICIT dönüştürmesinin aşağıdaki örnekte gösterildiği gibi XML oluşturmasını istediğinizi varsayalım:

<Employee EmpID="1" >
  <Name FName="Ken" LName="Sánchez" />
</Employee>
...

Hiyerarşide iki düzey olduğundan, iki SELECT sorgu yazar ve UNION ALL uygularsınız. Bu, öğenin ve özniteliklerinin <Employee> değerlerini alan ilk sorgudur. Sorgu, 1'yı Tag değeri olarak <Employee> öğesine ve NULL değerini de üst düzey öğe olduğu için Parent'ye atar.

SELECT 1    as Tag,
       NULL as Parent,
       E.BusinessEntityID AS [Employee!1!EmpID],
       NULL       as [Name!2!FName],
       NULL       as [Name!2!LName]
FROM   HumanResources.Employee AS E
INNER JOIN Person.Person AS P
ON  E.BusinessEntityID = P.BusinessEntityID;

Bu ikinci sorgudur. öğesinin <Name> değerlerini alır. 2 değerini Tag öğesi için ve <Name> değerini 1 üst öğesi olarak Parent etiketini tanımlayan olarak atar.

SELECT 2 as Tag,
       1 as Parent,
       E.BusinessEntityID,
       FirstName,
       LastName
FROM   HumanResources.Employee AS E
INNER JOIN Person.Person AS P
ON  E.BusinessEntityID = P.BusinessEntityID;

Şu sorguları UNION ALL birleştirin, FOR XML EXPLICIT uygulayın ve gerekli ORDER BY yan tümceyi belirtin. Addaki NULL değerlerin ilk olarak görünmesi için satır kümesini önce BusinessEntityID ada göre, sonra da ada göre sıralamanız gerekir. FOR XML yan tümcesi olmadan aşağıdaki sorguyu yürüterek evrensel tablonun oluşturulduğunu görebilirsiniz.

Bu son sorgudur:

SELECT 1    as Tag,
       NULL as Parent,
       E.BusinessEntityID as [Employee!1!EmpID],
       NULL       as [Name!2!FName],
       NULL       as [Name!2!LName]
FROM   HumanResources.Employee AS E
INNER JOIN Person.Person AS P
ON  E.BusinessEntityID = P.BusinessEntityID
UNION ALL
SELECT 2 as Tag,
       1 as Parent,
       E.BusinessEntityID,
       FirstName,
       LastName
FROM   HumanResources.Employee AS E
INNER JOIN Person.Person AS P
ON  E.BusinessEntityID = P.BusinessEntityID
ORDER BY [Employee!1!EmpID],[Name!2!FName]
FOR XML EXPLICIT;

Kısmi sonuç şu şekildedir:

<Employee EmpID="1">
  <Name FName="Ken" LName="Sánchez" />
</Employee>
<Employee EmpID="2">
  <Name FName="Terri" LName="Duffy" />
</Employee>
...

birincisi SELECT , sonuçta elde edilen satır kümesindeki sütunların adlarını belirtir. Bu adlar iki sütun grubu oluşturur. Sütun adında Tag değeri olan grup 1 olarak bir öğeyi ve Employee olarak özniteliği tanımlar. Diğer sütun grubunun içindeki sütunun Tag değer 2 vardır ve <Name> öğe olarak, FName ile LName öznitelikler olarak tanımlanır.

Aşağıdaki tabloda sorgu tarafından oluşturulan kısmi satır kümesi gösterilmektedir:

Etiket Ebeveyn Çalışan!1!EmpID Ad!2!FName Ad!2!Soyadı
1 null 1 null null
2 1 1 Ken Sánchez
1 null 2 null null
2 1 2 Terri Duffy
1 null 3 null null
2 1 3 Roberto Tamburello
... ... ... ... ...

Evrensel tablodaki satırlar, sonuçta elde edilen XML ağacını üretmek için bu şekilde işlenir:

İlk satır Tag değerini 1 tanımlar. Bu nedenle, Tag değerine sahip sütun grubu 1 olarak belirlenirEmployee!1!EmpID. Bu sütun öğe adı olarak tanımlanır Employee . Ardından, özniteliklere sahip olan bir <Employee> öğesi EmpID oluşturulur. Karşılık gelen sütun değerleri bu özniteliklere atanır.

İkinci satırın değeri Tag2. Bu nedenle, sütun adında Tag değeri 2 olan sütun grubu Name!2!FName, Name!2!LName tanımlanır. Bu sütun adları Name öğe adı olarak tanımlar. <Name> ve FName öznitelikleri olan LName bir öğe oluşturulur. Buna karşılık gelen sütun değerleri daha sonra bu özniteliklere atanır. Bu satır 1'yı Parent olarak tanımlar. Bu alt öğe, önceki <Employee> öğeye katılır.

Bu işlem satır kümesindeki satırların geri kalanı için yinelenir. FOR XML EXPLICIT'in satır kümesini sırayla işleyebilmesi ve istediğiniz XML'yi oluşturabilmesi için evrensel tablodaki satırları sıralamanın önemine dikkat edin.

Ayrıca bakınız