Compartir a través de


Columnas con el nombre de una prueba de nodo XPath

Si el nombre de columna es una de las pruebas de nodo XPath, el contenido se asigna como se muestra en la tabla siguiente. Cuando el nombre de columna es una prueba de nodo XPath, el contenido se asigna al nodo correspondiente. Si el tipo SQL de la columna es xml, se devuelve un error.

Nombre de la columna Comportamiento
text() Para una columna con el nombre text(), el valor de cadena de esa columna se agrega como un nodo de texto.
comment() Para una columna con el nombre de comment(), el valor de cadena de esa columna se agrega como comentario XML.
node() Para una columna con el nombre node(), el resultado es el mismo que cuando el nombre de columna es un carácter comodín (*).
processing-instruction(name) Para una columna con el nombre de una instrucción de procesamiento, el valor de cadena de esa columna se agrega como valor PI para el nombre de destino de instrucción de procesamiento.

En la consulta siguiente se muestra cómo se utilizan las pruebas de los nodos como nombres de columna. Agrega nodos de texto y comentarios en el XML resultante.

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;  

El resultado es el siguiente:

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

Véase también

Usar el modo PATH con FOR XML