Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
I det här exemplet hämtas ett medarbetar-ID och medarbetarens namn för varje anställd.
AdventureWorks2025 I databasen kan employeeID hämtas från kolumnen BusinessEntityID i tabellen Employee. Medarbetarnamn kan hämtas från tabellen Person. Kolumnen BusinessEntityID kan användas för att koppla tabellerna.
Anta att du vill att FOR XML EXPLICIT-transform ska generera XML så som visas i följande exempel:
<Employee EmpID="1" >
<Name FName="Ken" LName="Sánchez" />
</Employee>
...
Eftersom det finns två nivåer i hierarkin skulle du skriva två SELECT frågor och tillämpa UNION ALL. Det här är den första frågan som hämtar värden för elementet <Employee> och dess attribut. Frågan tilldelar 1 som Tag värde för elementet <Employee> och NULL som Parent, eftersom det är elementet på den översta nivån.
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;
Det här är den andra frågan. Den hämtar värden för elementet <Name> . Det tilldelar 2 som Tag värde för elementet <Name> och 1 som taggvärde som Parent identifierar <Employee> som överordnat.
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;
Du kombinerar dessa frågor med UNION ALL, tillämpar FOR XML EXPLICIToch anger den obligatoriska ORDER BY satsen. Du måste sortera raduppsättningen först BusinessEntityID efter och sedan efter namn så att NULL-värdena i namnet visas först. Genom att köra följande fråga utan FOR XML-satsen kan du se att den universella tabellen har genererats.
Det här är den sista frågan:
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;
Detta är det partiella resultatet:
<Employee EmpID="1">
<Name FName="Ken" LName="Sánchez" />
</Employee>
<Employee EmpID="2">
<Name FName="Terri" LName="Duffy" />
</Employee>
...
Den första SELECT anger namn på kolumner i den resulterande raduppsättningen. Dessa namn bildar två kolumngrupper. Den grupp som har Tag värdet 1 i kolumnnamnet identifierar Employee som ett element och EmpID som attribut. Den andra kolumngruppen har Tag värdet 2 i kolumnen och identifierar <Name> som elementet och FName och LName som attribut.
I följande tabell visas den partiella raduppsättningen som genereras av frågan:
| Tagg | Förälder | Anställd!1!EmpID | Namn!2!Förnamn | Namn!2!Efternamn |
|---|---|---|---|---|
| 1 | NOLL | 1 | NOLL | NOLL |
| 2 | 1 | 1 | Ken | Sánchez |
| 1 | NOLL | 2 | NOLL | NOLL |
| 2 | 1 | 2 | Terri | Duffy |
| 1 | NOLL | 3 | NOLL | NOLL |
| 2 | 1 | 3 | Roberto | Tamburello |
| ... | ... | ... | ... | ... |
Så här bearbetas raderna i den universella tabellen för att skapa det resulterande XML-trädet:
Den första raden identifierar Tag värdet 1. Därför identifieras den kolumngrupp som har Tag värdet 1 . Employee!1!EmpID Den här kolumnen identifierar Employee som elementnamnet. Ett <Employee> element skapas sedan som har EmpID attribut. Motsvarande kolumnvärden tilldelas till dessa attribut.
Den andra raden har Tag värdet 2. Därför identifieras den kolumngrupp som har Tag värdet 2 i kolumnnamnet , Name!2!FName, Name!2!LName. Dessa kolumnnamn identifierar sig Name som elementnamn. Ett <Name> element skapas som har FName och LName attribut. Motsvarande kolumnvärden tilldelas sedan till dessa attribut. Den här raden identifierar 1 sig som Parent. Det underordnade elementet läggs till i föregående <Employee> element.
Den här processen upprepas för resten av raderna i raduppsättningen. Observera vikten av att ordna raderna i den universella tabellen så att FÖR XML EXPLICIT kan bearbeta raduppsättningen i ordning och generera den XML du vill ha.