Delen via


Kolommen met de naam van een XPath-knooppunttest

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Als de kolomnaam een van de XPath-knooppunttests is, wordt de inhoud toegewezen zoals weergegeven in de onderstaande tabel. Wanneer de kolomnaam een XPath-knooppunttest is, wordt de inhoud toegewezen aan het bijbehorende knooppunt. Als het SQL-type van de kolom XML is, wordt er een fout geretourneerd.

Kolomnaam Gedrag
text() Voor een kolom met de naam text(), wordt de tekenreekswaarde in die kolom toegevoegd als een tekstknooppunt.
comment() Voor een kolom met de naam van comment(), wordt de tekenreekswaarde in die kolom toegevoegd als xml-opmerking.
node() Voor een kolom met de naam node() is het resultaat hetzelfde als wanneer de kolomnaam een jokerteken (*) is.
verwerkingsinstructie (naam) Voor een kolom met de naam van een verwerkingsinstructie wordt de tekenreekswaarde in die kolom toegevoegd als de PI-waarde voor de doelnaam van de verwerkingsinstructie.

De volgende query toont het gebruik van de knooppunttests als kolomnamen. Hiermee worden tekstknooppunten en opmerkingen toegevoegd aan de resulterende XML.

USE AdventureWorks2022;
GO
SELECT E.BusinessEntityID "@EmpID",
        'Example of using node tests such as text(), comment(), processing-instruction()'  as "comment()",
        'Some PI'                        as "processing-instruction(PI)",
        'Employee name and address data' as "text()",
        'middle name is optional'        as "EmpName/text()",
        FirstName                        as "EmpName/First",
        MiddleName                       as "EmpName/Middle",
        LastName                         as "EmpName/Last",
        AddressLine1                     as "Address/AddrLine1",
        AddressLine2                     as "Address/AddrLIne2",
        City                             as "Address/City"
FROM   HumanResources.Employee AS E
INNER JOIN Person.Person AS P
    ON P.BusinessEntityID = E.BusinessEntityID
INNER JOIN Person.BusinessEntityAddress AS BAE
    ON BAE.BusinessEntityID = E.BusinessEntityID
INNER JOIN Person.Address AS A
    ON BAE.AddressID = A.AddressID
WHERE  E.BusinessEntityID=1
FOR XML PATH;

Dit is het resultaat:


<row EmpID="1">
<!--Example of using node tests such as text(), comment(), processing-instruction() -->
<?PI Some PI?>
    Employee name and address data
    <EmpName>middle name is optional
        <First>Ken</First>
        <Last>Sánchez</Last>
    </EmpName>
    <Address>
        <AddrLine1>4350 Minute Dr.</AddrLine1>
        <City>Minneapolis</City>
    </Address>
</row>

Zie ook