Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tema se proporciona información sobre el formato XML del lado cliente. El formato del lado cliente hace referencia al formato de XML en el nivel intermedio.
Nota:
En este tema se proporciona información adicional sobre el uso de la cláusula FOR XML en el lado cliente y se supone que ya 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.
Importante Para usar la funcionalidad FOR XML del lado cliente con el nuevo xml tipo de datos, los clientes siempre deben usar el proveedor de datos SQL Server Native Client (SQLNCLI11) en lugar del proveedor SQLOLEDB. SQLNCLI11 es la versión más reciente del proveedor de SQL Server y comprende completamente los tipos de datos introducidos en SQL Server 2005. El comportamiento de FOR XML del lado cliente con el proveedor SQLOLEDB tratará xml los tipos de datos como cadenas.
Aplicar formato a documentos XML en el lado cliente
Cuando una aplicación cliente ejecuta la consulta siguiente:
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 del cliente, generando el formato XML deseado.
En la tabla siguiente se muestran los modos que puede especificar con FOR XML del lado cliente.
| Modo FOR XML del lado cliente | Comentario |
|---|---|
| CRUDO | Genera resultados idénticos cuando se especifican en FOR XML del lado cliente o del lado servidor. |
| ANIDADO | Es similar al modo FOR XML AUTO en el servidor. |
| EXPLÍCITO | Es similar al modo FOR XML EXPLICIT del lado servidor. |
Nota:
Si especifica el modo AUTO y solicita formato XML del lado cliente, toda la consulta se envía al servidor; es decir, el formato XML se produce en el servidor. Esto se hace para mayor comodidad, pero tenga en cuenta que el modo NESTED devuelve nombres de tabla base como nombres de elemento en el documento XML que se genera. Algunas de las aplicaciones que escriba pueden 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, a continuación, generar un diffGram para actualizar los datos de las tablas. En tal caso, necesitaría la información de la tabla base y tendría que usar el modo NESTED.
Ventajas del formato XML del lado cliente
A continuación se muestran algunas ventajas de dar formato a 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 un XML.
Por ejemplo, considere el siguiente procedimiento almacenado. Este procedimiento devuelve los nombres y 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í solo 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:
Cuando usa el proveedor SQLXMLOLEDB o las clases administradas de SQLXML, puede usar la ClientSideXml propiedad para solicitar formato XML del lado cliente.
La carga de trabajo es más equilibrada.
Dado que el cliente realiza el formato XML, la carga de trabajo se equilibra entre el servidor y el cliente, lo que libera al servidor para hacer otras cosas.
Compatibilidad con el formato XML del lado 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 de SQLXML en true.
Compatibilidad mejorada con plantillas XML
A partir de SQL Server 2005, la plantilla XML de SQL Server se ha mejorado con la adición del atributo client-side-xml . Si este atributo se establece en true, xml tiene el formato 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.
Véase también
Arquitectura del formato XML del lado cliente y del lado servidor (SQLXML 4.0)
FOR XML (SQL Server)
Consideraciones de seguridad for XML (SQLXML 4.0)
Compatibilidad con tipos de datos xml en SQLXML 4.0
Clases administradas de SQLXML
Formato XML del lado cliente frente al lado servidor (SQLXML 4.0)
Objeto SqlXmlCommand (clases administradas de SQLXML)
Datos XML (SQL Server)