Aracılığıyla paylaş


Örnek: Çalışan bilgileri alınıyor

Bu örnek, bir çalışan kimliği ve her çalışan için çalışan adını alır. De AdventureWorks2012 veritabanı, ÇalışanNo elde edilemiyor dan BusinessEntityIDsütununda Employeetablosu. Çalışan adları elde edilemiyor dan Persontablosu. BusinessEntityIDSütun tablo katılmak için kullanılabilir.

Aşağıdaki gösterildiği gibi xml oluşturmak için for xml açık dönüşümünü istediğiniz varsayılmaktadır:

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

Hiyerarşi içinde iki düzeyde olduğundan, iki yazacaktım SELECTsorgular ve UNION all uygulamak. Bu değerleri alır, ilk sorgudur <Employee> eleman ve özniteliklerini. Sorgu atar 1olarak Tagiçin değer <Employee>eleman ve boş olarak Parent, çünkü onun en üst düzey öğe.

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;

İkinci sorgu budur. Değerleri alır <Name> öğesi. O atar 2olarak Tagiçin değer <Name>eleman ve 1olarak ParentEtiket değeri tanımlayan <Employee>Ebeveyn olarak.

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;

Bu sorguları ile birleştirmek UNION ALl, uygulama FOR XML EXPLICITve gerekli ORDER BYyan. Satır kümesi ilk sıralamada gerekir BusinessEntityIDve daha sonra adı null değerleri böylece adıyla ilk görünür. for xml yan tümcesi olmadan aşağıdaki sorgu yürüterek, evrensel tablosu görebilirsiniz.

Bu nihai bir 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;

Bu kısmi bir sonucudur:

<Employee EmpID="1">

<Name FName="Ken" LName="Sánchez" />

</Employee>

<Employee EmpID="2">

<Name FName="Terri" LName="Duffy" />

</Employee>

...

İlk SELECTsonuç kümesi içinde sütun adlarını belirtir. Bu adları iki sütun gruplarını oluştururlar. Sahip bir grubu Tagdeğeri 1Ad sütununda tanımlar Employeebir unsuru olarak ve EmpIDözniteliği olarak. Diğer sütun grubu olan Tagdeğeri 2sütun ve <Name>unsur olarak ve FNameve LNamenitelikleri.

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

Tag Parent  Employee!1!EmpID Name!2!FName Name!2!LName

--- ------  ---------------- ------------ ------------

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ın sonuç xml ağacını üretmek için nasıl işlenir budur:

İlk satırı tanımlar Tagdeğeri 1. Bu nedenle, sahip bir sütun grubu Tagdeğeri 1tanımlanır, Employee!1!EmpID. Bu sütunu tanımlar Employeeöğesi adı. Bir <Employee> öğesi olan oluşturulan sonra EmpIDöznitelikleri. Bu öznitelikler için karşılık gelen sütun değerleri atanır.

İkinci satır vardır Tagdeğeri 2. Bu nedenle, sahip bir sütun grubu Tagdeğeri 2sütun adı, Name!2!FName, Name!2!LName, tanımlanır. Bu sütun adları belirlemek Nameöğesi adı. A <Name> öğesi olan oluşturulan FNameve LNameöznitelikleri. Buna karşılık gelen sütun değerleri, daha sonra bu öznitelikler için atanır. Bu satırı tanımlayan 1olarak Parent. Bu öğe alt önceki eklenen <Employee> öğesi.

Bu işlem, satır satır kümesi geri kalanı için yinelenir. for xml açık satır kümesi sırayla işlemek istediğiniz xml oluşturur böylece edebilirsiniz evrensel tablodaki satırları sıralama önemini unutmayın.

Ayrıca bkz.

Başvuru

Kullanımı ile for xml Açık modu