Freigeben über


Spalten mit Namen von XPath-Knotentests

Wenn der Spaltenname einer der XPath-Knotentests ist, wird der Inhalt wie in der folgenden Tabelle gezeigt zugeordnet. Wenn der Spaltenname ein XPath-Knotentest ist, wird der Inhalt dem entsprechenden Knoten zugeordnet. Wenn der SQL-Typ der Spalte lautet xml, wird ein Fehler zurückgegeben.

Spaltenname Verhalten
text() Bei einer Spalte mit dem Namen text() wird der Zeichenfolgenwert in dieser Spalte als Textknoten hinzugefügt.
Kommentar() Bei einer 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 Platzhalterzeichen (*) ist.
Verarbeitungsanweisung(name) Bei einer 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. Es fügt Textknoten und Kommentare in der resultierenden XML hinzu.

USE AdventureWorks2012;  
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

Verwenden des PATH-Modus mit FOR XML