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 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 acerca de FOR XML, vea Generar XML mediante FOR XML.
Importante Para usar la funcionalidad de FOR XML del lado cliente con el nuevo tipo de datos xml, los clientes deberían usar siempre el proveedor de datos de SQL Server Native Client (SQLNCLI11) en lugar del proveedor SQLOLEDB. SQLNCLI11 es la versión más reciente del proveedor de SQL Server y entiende a la perfección los tipos de datos incluidos 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
...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 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 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, 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 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 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í 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]
Si usa el proveedor SQLXMLOLEDB o clases administradas SQLXML, puede usar la propiedad ClientSideXml para solicitar la aplicación de 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 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, 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.
Vea también
Referencia
Arquitectura de aplicación de formato XML en el cliente y en el servidor (SQLXML 4.0)
Consideraciones de seguridad de FOR XML (SQLXML 4.0)
Compatibilidad con tipos de datos xml en SQLXML 4.0
Clases administradas de SQLXML
Diferencias de aplicación de formato XML entre el cliente y el servidor (SQLXML 4.0)
Objeto SqlXmlCommand (clases administradas SQLXML)