Spalten mit dem Namen eines XPath-Knotentests

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

Wenn es sich bei dem Spaltennamen um einen der XPath-Knotentests handelt, wird der Inhalt zugeordnet, wie in der folgenden Tabelle gezeigt. Wenn der Spaltenname ein XPath-Knotentest ist, wird der Inhalt dem entsprechenden Knoten zugeordnet. Wenn der SQL-Typ der Spalte xmlist, wird ein Fehler zurückgegeben.

Spaltenname Verhalten
text() Für eine Spalte mit dem Namen text() wird der Zeichenfolgenwert in dieser Spalte als Textknoten hinzugefügt.
comment() Für eine Spalte mit dem Namen comment() wird der Zeichenfolgenwert in dieser Spalte als XML-Kommentar hinzugefügt.
node() Bei einer Spalte mit dem Namen node() entspricht das Ergebnis dem, wenn der Spaltenname ein Wildcardzeichen (*) ist.
processing-instruction(name) Für eine Spalte mit dem Namen einer Verarbeitungsanweisung wird der Zeichenfolgenwert in dieser Spalte als PI-Wert für den Zielnamen der Verarbeitungsanweisung hinzugefügt.

Die folgende Abfrage zeigt die Verwendung der Knotentests als Spaltennamen an. Dabei werden Textknoten und Kommentare im XML-Ergebnis hinzugefügt.

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;

Dies ist das Ergebnis:


<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>

Siehe auch