Örnek: Çalışan bilgileri alınıyor.
Bu örnekte, çalışan NUMARASı ve her çalışan için çalışan adlarını alır.Çalışan alınabilir AdventureWorks veritabanındaki employeeID tablo.Çalışan adları, ilgili kişi elde edilebilir tablo.Ilgili kişi kimliği sütun, tabloları birleştirmek için kullanılabilir.
Aşağıdaki gösterildiği gibi XML oluşturmak IÇIN XML AÇıK dönüştürme istediğinizi varsayalım:
<Employee EmpID="1" >
<Name FName="Guy" LName="Gilbert" />
</Employee>
...
Hiyerarşi içinde iki düzeyde olduğundan, iki SELECT sorgularını yazma ve UNION ALL geçerli.Bu değerleri alır ilk sorguyu, <Employee> öğe ve öznitelikleri. Sorgu 1 olarak atar. Etiket <Employee> öğe ve olarak NULL değeriÜst, çünkü en üst düzey öğe.
SELECT 1 as Tag,
NULL as Parent,
EmployeeID as [Employee!1!EmpID],
NULL as [Name!2!FName],
NULL as [Name!2!LName]
FROM HumanResources.Employee E, Person.Contact C
WHERE E.ContactID = C.ContactID
Bu ikinci sorgusudur.Bu değerleri alır <Name> Öğe. Bunu, 2 olarak atar Etiket <Name> öğe ve 1 değeriÜst <Employee> üst olarak tanımlamak için etiket değeri.
SELECT 2 as Tag,
1 as Parent,
EmployeeID,
FirstName,
LastName
FROM HumanResources.Employee E, Person.Contact C
WHERE E.ContactID = C.ContactID
Bu sorguları UNION ALL ile birleştirmek IÇIN XML AÇıK olarak uygulanır ve gerekli ORDER BY yan tümce belirtin.Böylece adı NULL değerlerini ilk görünür satır kümesi, ÇalışanNo önce ve sonra ada göre sıralamanız gerekir.FOR XML yan tümce olmayan aşağıdaki sorgu yürütülerek, Evrensel gördüğünüz tablo oluşturulur.
Bu son sorgudur:
SELECT 1 as Tag,
NULL as Parent,
EmployeeID as [Employee!1!EmpID],
NULL as [Name!2!FName],
NULL as [Name!2!LName]
FROM HumanResources.Employee E, Person.Contact C
WHERE E.ContactID = C.ContactID
UNION ALL
SELECT 2 as Tag,
1 as Parent,
EmployeeID,
FirstName,
LastName
FROM HumanResources.Employee E, Person.Contact C
WHERE E.ContactID = C.ContactID
ORDER BY [Employee!1!EmpID],[Name!2!FName]
FOR XML EXPLICIT
Bu kısmi kaynaklanır:
<Employee EmpID="1">
<Name FName="Guy" LName="Gilbert" />
</Employee>
<Employee EmpID="2">
<Name FName="Kevin" LName="Brown" />
</Employee>
...
Sütun adları, ilk SELECT'de bir sonuç kümesi belirtir.Bu adlar, iki sütun grubu oluşturur.Sahip grubu Etiket değeri 1, sütun adı içinde çalışan bir öğe ve öznitelik olarak EmpID olarak tanımlar.Sütun grubu etiket değeri 2 sütun ve tanımlar <Name> öğe ve FName ve LName öznitelikleri olarak.
Aşağıdaki tablo, sorgu tarafından oluşturulmuş kısmi satır kümesi kümesi gösterir:
Tag Parent Employee!1!EmpID Name!2!FName Name!2!LName
----------- ----------- ---------------- -------------------
1 NULL 1 NULL NULL
2 1 1 Guy Gilbert
1 NULL 2 NULL NULL
2 1 2 Kevin Brown
1 NULL 3 NULL NULL
2 1 3 Roberto Tamburello
...
Evrensel bir tablodaki satırların ortaya çıkan XML ağacı oluşturmak için nasıl işleneceğini budur:
Ilk satırı belirtir. Etiket 1 değeri.Bu nedenle, sahip sütununu grubu Etiket 1 değeri tanımlanır, çalışan! 1! EmpID.Bu sütun, çalışan öğe adı olarak tanımlar.Bir <Employee> öğe EmpID özniteliklere sahip sonra oluşturulur. Karşılık gelen sütun değerleri için bu öznitelikleri atanır.
Ikinci satır sahip Etiket 2 değeri.Bu nedenle, sahip sütununu grubu Etiket değeri 2, adı sütun adı! 2! FName, ad! 2! LName, tanımlanır.Bu sütun adları, ad öğe adı tanımlar.C <Name> öğe FName ve LName özniteliklere sahip oluşturulur. Karşılık gelen sütun değerleri, daha sonra bu öznitelikleri atanır.Bu satır 1'olarak tanımlar. Üst.Bu öğe alt önceki için eklenir. <Employee> Öğe.
Bu işlem, satır kümesi kümesi satır kümesi kümesi geri kalanı için yinelenir.Evrensel satırları sıralama önemi not tablo IÇIN XML AÇıK de siparişindeki satır kümesi kümesi işlemek ve istediğiniz XML oluştur.