Aplicación de formato XML en el cliente (SQLXML 4.0)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

En este tema se proporciona información acerca de la aplicación de formato XML del lado cliente. La aplicación de formato en el cliente se refiere a dar formato al XML en nivel intermedio.

Nota:

En este tema se proporciona información adicional acerca de la forma de usar la cláusula FOR XML en el cliente y se da por sentado que está familiarizado con la cláusula FOR XML. Para obtener más información sobre FOR XML, vea Construcción de XML mediante FOR XML.

SQLNCLI11 fue la primera versión del proveedor de SQL Server para comprender completamente los tipos de datos introducidos en SQL Server 2005 (9.x). El comportamiento de FOR XML del lado cliente con el proveedor SQLOLEDB tratará los tipos de datos xml como cadenas.

Importante

SQL Server Native Client (a menudo abreviado SNAC) se ha quitado de SQL Server 2022 (16.x) y SQL Server Management Studio 19 (SSMS). No se recomienda SQL Server Native Client (SQLNCLI o SQLNCLI11) ni el proveedor OLE DB de Microsoft heredado para SQL Server (SQLOLEDB) para el desarrollo de nuevas aplicaciones. Cambie al nuevo controlador OLE DB de Microsoft (MSOLEDBSQL) para SQL Server o al controlador ODBC de Microsoft ODBC Driver for SQL Server más reciente de ahora en adelante. Para SQLNCLI que se incluye como componente de SQL Server motor de base de datos (versiones 2012 a 2019), consulte esta excepción de ciclo de vida de soporte técnico.

Aplicar formato a documentos XML en el cliente

Cuando una aplicación cliente ejecuta la siguiente consulta:

SELECT FirstName, LastName  
FROM   Person.Contact  
FOR XML RAW  

...solo esta parte de la consulta se envía al servidor:

SELECT FirstName, LastName  
FROM   Person.Contact  

El servidor ejecuta la consulta y devuelve un conjunto de filas (que contiene FirstName y LastNamecolumns) al cliente. A continuación, el nivel intermedio aplica la transformación FOR XML al conjunto de filas y devuelve el formato XML al cliente.

Del mismo modo, al ejecutar una consulta XPath, el servidor devuelve el conjunto de filas al cliente y la transformación FOR XML EXPLICIT se aplica al conjunto de filas en el cliente, de forma que se genera el formato XML deseado.

En la tabla siguiente se muestran los modos que pueden especificarse con FOR XML del lado cliente.

Modo FOR XML del lado cliente Comentario
RAW Genera resultados idénticos cuando se especifica en FOR XML del lado cliente o del lado servidor.
NESTED Es similar al modo FOR XML AUTO en el servidor.
EXPLICIT Es similar al modo FOR XML EXPLICIT en el servidor.

Nota:

Si especifica el modo AUTO y solicita la aplicación de formato XML del lado cliente, se envía la consulta completa al servidor, es decir, el formato XML se aplica en el servidor. Esto se hace así por comodidad, pero observe que el modo NESTED devuelve los nombres de tabla base como nombres de elemento en el documento XML que se genera. Algunas de las aplicaciones que escriba podrían requerir nombres de tabla base. Por ejemplo, puede ejecutar un procedimiento almacenado y cargar los datos resultantes en un conjunto de datos (en Microsoft .NET Framework) y, después, generar un DiffGram para actualizar los datos de las tablas. En ese caso, necesitaría la información de tabla base y tendría que usar el modo NESTED.

Ventajas de la aplicación de formato XML en el cliente

A continuación, se muestran algunas de las ventajas de la aplicación de formato XML en el cliente.

Si tiene procedimientos almacenados en el servidor que devuelven un único conjunto de filas, puede solicitar la transformación FOR XML del lado cliente para generar XML.

Por ejemplo, fíjese en el siguiente procedimiento almacenado. Este procedimiento devuelve el nombre y los apellidos de los empleados de la tabla Person.Contact de la base de datos AdventureWorks:

IF EXISTS (SELECT name FROM sysobjects  
   WHERE name = 'GetContacts' AND type = 'P')  
   DROP PROCEDURE GetContacts  
GO  
CREATE PROCEDURE GetContacts  
AS  
    SELECT   FirstName, LastName  
    FROM     Person.Contact  

La siguiente plantilla XML de ejemplo ejecuta el procedimiento almacenado. La cláusula FOR XML se especifica después del nombre del procedimiento almacenado.

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <sql:query client-side-xml="1">  
    EXEC GetContacts FOR XML NESTED  
  </sql:query>  
</ROOT>  

Dado que el atributo client-side-xml se establece en 1 (true) en la plantilla, el procedimiento almacenado se ejecuta en el servidor y el conjunto de filas de dos columnas devuelto por el servidor se transforma en XML en el nivel intermedio y se devuelve al cliente. (Aquí solamente se muestra un resultado parcial.)

 <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <Person.Contact FirstName="Gustavo" LastName="Achong" />   
  <Person.Contact FirstName="Catherine" LastName="Abel" />  
</ROOT>  

Nota:

Al usar el proveedor SQLXMLOLEDB o las clases administradas de SQLXML, puede usar la propiedad ClientSideXml para solicitar el formato XML del lado cliente.

La carga de trabajo está más equilibrada.

Dado que el cliente aplica el formato XML, la carga de trabajo se equilibra entre el servidor y cliente, dejando libre al servidor para que realice otras tareas.

Compatibilidad con el formato XML en el cliente

Para admitir la funcionalidad de formato XML del lado cliente, SQLXML proporciona:

  • proveedor SQLXMLOLEDB

  • clases administradas de SQLXML

  • Compatibilidad mejorada con plantillas XML

  • Propiedad SqlXmlCommand.ClientSideXml

    Puede especificar el formato del lado cliente estableciendo esta propiedad de las clases administradas SQLXML en True.

Compatibilidad mejorada con plantillas XML

A partir de SQL Server 2005 (9.x), la plantilla XML de SQL Server se ha mejorado con la adición del atributo client-side-xml. Si este atributo está establecido en True, se aplica formato al XML en el cliente. Tenga en cuenta que este atributo de plantilla es idéntico en la funcionalidad de la propiedad ClientSideXML específica del proveedor SQLXMLOLEDB.

Nota:

Si ejecuta una plantilla XML en una aplicación de ADO que usa el proveedor SQLXMLOLEDB y especifica el atributo client-side-xml en la plantilla y la propiedad ClientSideXML del proveedor, el valor especificado en la plantilla tiene prioridad.

Consulte también

Arquitectura de aplicación de formato XML en el cliente y en el servidor (SQLXML 4.0)
FOR XML (SQL Server)
Consideraciones de seguridad de FOR XML (SQLXML 4.0)
Compatibilidad con tipos de datos xml en SQLXML 4.0
clases administradas de SQLXML
Lado cliente y Aplicación de formato XML en el servidor (SQLXML 4.0)
Objeto SqlXmlCommand (clases administradas SQLXML)
Datos XML (SQL Server)