FOR XML (SQL Server)FOR XML (SQL Server)

Para obtener contenido relacionado con versiones anteriores de SQL Server, vea FOR XML (SQL Server).For content related to previous versions of SQL Server, see FOR XML (SQL Server).

Una consulta SELECT devuelve los resultados como un conjunto de filas.A SELECT query returns results as a rowset. Opcionalmente, se pueden recuperar resultados formales de una consulta SQL como XML especificando la cláusula FOR XML en la consulta.You can optionally retrieve formal results of a SQL query as XML by specifying the FOR XML clause in the query. La cláusula FOR XML puede usarse en consultas de nivel superior y en subconsultas.The FOR XML clause can be used in top-level queries and in sub queries. La cláusula FOR XML de nivel superior solo puede usarse en la instrucción SELECT.The top-level FOR XML clause can be used only in the SELECT statement. En el caso de las subconsultas, FOR XML puede usarse en las instrucciones INSERT, UPDATE y DELETE.In sub queries, FOR XML can be used in the INSERT, UPDATE, and DELETE statements. También puede usarse en instrucciones de asignación.It can also be used in assignment statements.

En una cláusula FOR XML se especifica uno de estos modos:In a FOR XML clause, you specify one of these modes:

  • RAWRAW

  • AUTOAUTO

  • EXPLICITEXPLICIT

  • PATHPATH

    El modo RAW genera un único elemento <row> por cada fila del conjunto de filas devuelto por la instrucción SELECT.The RAW mode generates a single <row> element per row in the rowset that is returned by the SELECT statement. Para generar una jerarquía XML se pueden escribir consultas FOR XML anidadas.You can generate XML hierarchy by writing nested FOR XML queries.

    El modo AUTO genera anidamiento en el XML resultante utilizando heurística basada en la forma en que se especifica la instrucción SELECT.The AUTO mode generates nesting in the resulting XML by using heuristics based on the way the SELECT statement is specified. El control sobre la forma del XML generado es mínimo.You have minimal control over the shape of the XML generated. Es posible escribir consultas FOR XML anidadas para generar una jerarquía XML más allá de la forma del XML generado mediante la heurística del modo AUTO.The nested FOR XML queries can be written to generate XML hierarchy beyond the XML shape that is generated by AUTO mode heuristics.

    El modo EXPLICIT concede un mayor control de la forma del XML.The EXPLICIT mode allows more control over the shape of the XML. Es posible mezclar atributos y elementos con total libertad para decidir la forma del XML.You can mix attributes and elements at will in deciding the shape of the XML. Requiere un formato específico para el conjunto de filas resultante generado debido a la ejecución de la consulta.It requires a specific format for the resulting rowset that is generated because of query execution. Después, el formato del conjunto de filas se asigna a una forma de XML.This rowset format is then mapped into XML shape. La eficacia del modo EXPLICIT reside en que se pueden mezclar atributos y elementos con total libertad, crear contenedores y propiedades complejas anidadas, crear valores separados por espacios (por ejemplo, el atributo OrderID puede tener una lista de valores de Id. de orden) y contenido mezclado.The power of EXPLICIT mode is to mix attributes and elements at will, create wrappers and nested complex properties, create space-separated values (for example, OrderID attribute may have a list of order ID values), and mixed contents.

    Sin embargo, escribir consultas con el modo EXPLICIT puede ser un proceso complejo.However, writing EXPLICIT mode queries can be cumbersome. Se pueden utilizar algunas de las características nuevas de FOR XML, como la posibilidad de escribir consultas anidadas FOR XML en modo RAW/AUTO/PATH y la directiva TYPE, en lugar de utilizar el modo EXPLICIT para generar las jerarquías.You can use some of the new FOR XML capabilities, such as writing nested FOR XML RAW/AUTO/PATH mode queries and the TYPE directive, instead of using EXPLICIT mode to generate the hierarchies. Las consultas FOR XML anidadas pueden generar el mismo XML que el modo EXPLICIT.The nested FOR XML queries can produce any XML that you can generate by using the EXPLICIT mode. Para obtener más información, vea Usar consultas FOR XML anidadas y Directiva TYPE en consultas FOR XML.For more information, see Use Nested FOR XML Queries and TYPE Directive in FOR XML Queries.

    El modo PATH, junto con la característica de las consultas anidadas FOR XML, proporciona la flexibilidad del modo EXPLICIT de una manera más sencilla.The PATH mode together with the nested FOR XML query capability provides the flexibility of the EXPLICIT mode in a simpler manner.

    Estos modos solamente tienen efecto en la ejecución de la consulta para la que se configuraron.These modes are in effect only for the execution of the query for which they are set. No afectan a los resultados de ninguna de las consultas posteriores.They do not affect the results of any subsequent queries.

    La cláusula FOR XML no es válida en una selección que se use junto con una cláusula FOR BROWSE.FOR XML is not valid for any selection that is used with a FOR BROWSE clause.

EjemploExample

La siguiente instrucción SELECT recupera información de las tablas Sales.Customer y Sales.SalesOrderHeader de la base de datos AdventureWorks2012 .The following SELECT statement retrieves information from the Sales.Customer and Sales.SalesOrderHeader tables in the AdventureWorks2012 database. Esta consulta especifica el modo AUTO en la cláusula FOR XML :This query specifies the AUTO mode in the FOR XML clause:

USE AdventureWorks2012  
GO  
SELECT Cust.CustomerID,   
       OrderHeader.CustomerID,  
       OrderHeader.SalesOrderID,   
       OrderHeader.Status  
FROM Sales.Customer Cust   
INNER JOIN Sales.SalesOrderHeader OrderHeader  
ON Cust.CustomerID = OrderHeader.CustomerID  
FOR XML AUTO  

La cláusula FOR XML y nombres de servidorThe FOR XML Clause and Server Names

Cuando una instrucción SELECT con una cláusula FOR XML especifica un nombre de cuatro partes en la consulta, el nombre de servidor no se devuelve en el documento XML resultante cuando la consulta se ejecuta en el equipo local.When a SELECT statement with a FOR XML clause specifies a four-part name in the query, the server name is not returned in the resulting XML document when the query is executed on the local computer. Sin embargo, el nombre del servidor se devuelve como un nombre de cuatro partes cuando la consulta se ejecuta en un servidor de red.However, the server name is returned as the four-part name when the query is executed on a network server.

Por ejemplo, considere esta consulta:For example, consider this query:

SELECT TOP 1 LastName  
FROM ServerName.AdventureWorks2012.Person.Person  
FOR XML AUTO  

Cuando ServerName es un servidor local, la consulta devuelve lo siguiente:When ServerName is a local server, the query returns the following:

<AdventureWorks2012.Person.Person LastName="Achong" />  

Cuando ServerName es un servidor de red, la consulta devuelve lo siguiente:When ServerName is a network server, the query returns the following:

<ServerName.AdventureWorks2012.Person.Person LastName="Achong" />  

Se puede evitar esta ambigüedad especificando este alias:This potential ambiguity can be avoided by specifying this alias:

SELECT TOP 1 LastName  
FROM ServerName.AdventureWorks2012.Person.Person x  
FOR XML AUTO   

Esta consulta devuelve lo siguiente:This query returns the following:

<x LastName="Achong"/>  

Vea tambiénSee Also

Sintaxis básica de la cláusula FOR XML Basic Syntax of the FOR XML Clause
Usar el modo RAW con FOR XML Use RAW Mode with FOR XML
Usar el modo AUTO con FOR XML Use AUTO Mode with FOR XML
Usar el modo EXPLICIT con FOR XML Use EXPLICIT Mode with FOR XML
Usar el modo PATH con FOR XML Use PATH Mode with FOR XML
OPENXML (SQL Server) OPENXML (SQL Server)
Agregar espacios de nombres a consultas con WITH XMLNAMESPACESAdd Namespaces to Queries with WITH XMLNAMESPACES