Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-adatbázis a Microsoft Fabricben
Ez a példa az egyes alkalmazottak alkalmazotti azonosítóját és alkalmazottnevét kéri le. Az AdventureWorks2025 adatbázisban az alkalmazottAzonosító az Alkalmazott tábla BusinessEntityID oszlopából szerezhető meg. Az alkalmazottak neve a Személy táblából kérhető le. A BusinessEntityID oszlop a táblák összekapcsolására használható.
Tegyük fel, hogy a FOR XML EXPLICIT átalakítás segítségével XML-t szeretne generálni az alábbi példa szerint.
<Employee EmpID="1" >
<Name FName="Ken" LName="Sánchez" />
</Employee>
...
Mivel a hierarchiában két szint található, két SELECT lekérdezést kell írnia, és az UNION ALL-t kell alkalmaznia. Ez az első lekérdezés, amely lekéri az elem és attribútumai <Employee> értékeit. A lekérdezés hozzárendeli a 1 értéket Tag értékként az <Employee> elemhez, és a NULL-t Parent elemként, mert ez a legfelső szintű elem.
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;
Ez a második lekérdezés. Lekéri az elem értékeit <Name> .
2 értékként történő hozzárendelése a Tag elemhez és <Name> címkeértékként, amelyek 1-t azonosítják szülőként.
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;
Ezeket a lekérdezéseket kombinálhatja UNION ALL-val, alkalmazza FOR XML EXPLICIT, és megadhatja a szükséges ORDER BY záradékot. Először BusinessEntityID szerint, majd név szerint kell rendeznie a sorhalmazt, hogy a név NULL értékei jelenjenek meg először. Ha a következő lekérdezést a FOR XML záradék nélkül hajtja végre, láthatja a létrehozott univerzális táblát.
Ez a végső lekérdezés:
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;
Ez a részleges eredmény:
<Employee EmpID="1">
<Name FName="Ken" LName="Sánchez" />
</Employee>
<Employee EmpID="2">
<Name FName="Terri" LName="Duffy" />
</Employee>
...
Az első SELECT az eredményként kapott sorhalmaz oszlopainak nevét adja meg. Ezek a nevek két oszlopcsoportot alkotnak. Az Tag csoport, amelynek oszlopneve 1 értéket tartalmaz, elemként Employee-t és attribútumként EmpID-t azonosít. A másik oszlopcsoportnak az oszlopban van Tag értéke 2, és az elemként azonosítja <Name>-t, valamint attribútumként FName-t és LName-t.
Az alábbi táblázat a lekérdezés által létrehozott részleges sorhalmazt mutatja be:
| Címke | Szülő | Alkalmazott!1! EmpID | Név!2! Vezetéknév | Név!2! Vezetéknév |
|---|---|---|---|---|
| 1 | NULLA | 1 | NULLA | NULLA |
| 2 | 1 | 1 | Látóhatár | Sánchez |
| 1 | NULLA | 2 | NULLA | NULLA |
| 2 | 1 | 2 | Terri | Duffy |
| 1 | NULLA | 3 | NULLA | NULLA |
| 2 | 1 | 3 | Roberto | Tamburello |
| ... | ... | ... | ... | ... |
A rendszer így dolgozza fel az univerzális tábla sorait az eredményként kapott XML-fa előállításához:
Az első sor azonosítja az Tag értéket 1. Ezért az oszlopcsoport, amely Tag értéket 1 tartalmaz, azonosítva van, Employee!1!EmpID. Ez az oszlop az elem neveként azonosítja Employee . Ezután létrejön egy <Employee> elem, amely attribútumokkal rendelkezik EmpID . A megfelelő oszlopértékek ezekhez az attribútumokhoz vannak rendelve.
A második sor értéke Tag2. Ezért az a oszlopcsoport kerül azonosításra, amelynek oszlopneve az Tag értéket 2 tartalmazza Name!2!FName, Name!2!LName. Ezek az oszlopnevek elemnévként vannak azonosítva Name . Létrejön egy <Name> elem, amely FName és LName attribútumokkal rendelkezik. A megfelelő oszlopértékek ezután ezekhez az attribútumokhoz lesznek hozzárendelve. Ez a sor a következőképpen azonosítja 1 : Parent. Ez a gyermekelem hozzá van adva az előző <Employee> elemhez.
Ez a folyamat a sorhalmaz többi sorában ismétlődik. Vegye figyelembe annak fontosságát, hogy az univerzális táblában rendezze a sorokat, hogy az XML EXPLICIT sorrendben tudja feldolgozni a sorhalmazt, és létrehozza a kívánt XML-t.