Compartir a través de


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

En este tema se proporciona información acerca de la aplicación de formato XML en el 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 acerca de FOR XML, vea Generar XML mediante FOR XML.

Importante   Para usar la funcionalidad de FOR XML en el cliente con el nuevo tipo de datos xml, los clientes deberían usar siempre el proveedor de datos de SQL Server Native Client (SQLNCLI10) en lugar del proveedor SQLOLEDB. SQLNCLI10 es la última versión del proveedor de SQL Server y entiende a la perfección los tipos de datos introducidos en SQL Server 2005. El uso de FOR XML en el cliente con el proveedor SQLOLEDB hará que los tipos de datos xml se consideren como cadenas.

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

...sólo 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 las columnas FirstName y LastName)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 en el cliente.

Modo FOR XML en el cliente

Comentario

RAW

Genera resultados idénticos cuando se especifica en FOR XML en el cliente o en el 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 en el 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, podría ejecutar un procedimiento almacenado y cargar los datos resultantes en un conjunto de datos (en Microsoft .NET Framework) y, más tarde, 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 en el 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 está establecido 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í sólo 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]

Si usa el proveedor SQLXMLOLEDB o clases administradas SQLXML, puede usar la propiedad ClientSideXml para solicitar la aplicación de formato XML en el 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 en el cliente, SQLXML proporciona:

  • Proveedor SQLXMLOLEDB

  • Clases administradas SQLXML

  • Compatibilidad mejorada con plantillas XML

  • Propiedad SqlXmlCommand.ClientSideXml

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

Compatibilidad mejorada con plantillas XML

A partir de SQL Server 2005, se han realizado mejoras en la plantilla XML de SQL Server mediante 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 funcionalidad a la propiedad ClientSideXML específica del proveedor SQLXMLOLEDB.

[!NOTA]

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