Formatação XML do lado do cliente (SQLXML 4.0)
Este tópico fornece informações sobre formatação de XML do lado do cliente. A formatação do lado do cliente refere-se à formatação de XML na camada intermediária.
Observação
Este tópico fornece informações adicionais sobre como usar a cláusula FOR XML no lado do cliente e supõe que você já esteja familiarizado com a cláusula FOR XML. Para obter mais informações sobre FOR XML, consulte Constructing XML using FOR XML.
Importante Para usar a funcionalidade FOR XML do lado do cliente com o novo xml
tipo de dados, os clientes sempre devem usar o provedor de dados SQL Server Native Client (SQLNCLI11) em vez do provedor SQLOLEDB. SQLNCLI11 é a versão mais recente do provedor de SQL Server e entende completamente os tipos de dados introduzidos no SQL Server 2005. O comportamento da cláusula FOR XML do lado do cliente com o provedor SQLOLEDB tratará os tipos de dados xml
como cadeias de caracteres.
Formatando documentos XML no lado do cliente
Quando um aplicativo cliente executa a seguinte consulta:
SELECT FirstName, LastName
FROM Person.Contact
FOR XML RAW
...só esta parte da consulta é enviada ao servidor:
SELECT FirstName, LastName
FROM Person.Contact
O servidor executa a consulta e retorna um conjunto de linhas (que contém FirstName e LastNamecolumns) para o cliente. A camada intermediária aplica as informações de FOR XML ao conjunto de linhas e retorna a formatação XML ao cliente.
De maneira similar, quando você executa uma consulta XPath, o servidor retorna o conjunto de linhas ao cliente e a transformação FOR XML EXPLICIT é aplicada ao conjunto de linhas no cliente, gerando a formatação XML desejada.
A tabela a seguir mostra os modos que você pode especificar com a cláusula FOR XML do lado do cliente.
Modo FOR XML do lado do cliente | Comentário |
---|---|
RAW | Gera resultados idênticos quando especificado em FOR XML do lado do cliente ou do lado do servidor. |
NESTED | É semelhante ao modo FOR XML AUTO no lado do servidor. |
EXPLICIT | É semelhante ao modo FOR XML EXPLICIT do lado do servidor. |
Observação
Se você especificar o modo AUTO e solicitar a formatação XML do lado do cliente, toda a consulta será enviada ao servidor, isto é, a formatação XML ocorrerá no servidor. Isto será feito por conveniência, mas observe que o modo NESTED retorna os nomes das tabelas base como nomes de elemento no documento XML gerado. Alguns dos aplicativos que você grava podem exigir nomes de tabela base. Por exemplo, você pode executar um procedimento armazenado e carregar os dados resultantes em um Conjunto de dados (no Microsoft .NET Framework) e, posteriormente, gerar um DiffGram para atualizar dados nas tabelas. Em tal caso, você precisará das informações da tabela base e precisará usar o modo NESTED.
Benefícios da formatação XML do lado do cliente
A seguir, são descritos alguns benefícios da formatação XML no cliente.
Se você tiver procedimentos armazenados no servidor que retornem um único conjunto de linhas, poderá solicitar que a transformação FOR XML do lado do cliente gere um XML.
Por exemplo, considere o procedimento armazenado a seguir. Esse procedimento retorna o nome e o sobrenome dos funcionários da tabela Person.Contact no banco de dados 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
O exemplo de modelo XML a seguir executa o procedimento armazenado. A cláusula FOR XML é especificada depois do nome de procedimento armazenado.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<sql:query client-side-xml="1">
EXEC GetContacts FOR XML NESTED
</sql:query>
</ROOT>
Como o atributo xml do lado do cliente é definido como 1 (true) no modelo, o procedimento armazenado é executado no servidor e o conjunto de linhas de duas colunas retornado pelo servidor é transformado em XML na camada intermediária e retornado ao cliente. (Somente um resultado parcial é mostrado aqui.)
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Person.Contact FirstName="Gustavo" LastName="Achong" />
<Person.Contact FirstName="Catherine" LastName="Abel" />
</ROOT>
Observação
Quando estiver usando o Provedor SQLXMLOLEDB ou as Classes Gerenciadas por SQLXML, você poderá usar a propriedade ClientSideXml
para solicitar a formatação XML do lado do cliente.
A carga de trabalho é mais equilibrada.
Como o cliente executa a formatação XML, a carga de trabalho é equilibrada entre o servidor e o cliente, liberando o servidor para fazer outras coisas.
Dando suporte à formatação XML do lado do cliente
Para dar suporte à funcionalidade de formatação XML do lado do cliente, o SQLXML fornece:
Provedor SQLXMLOLEDB
Classes gerenciadas SQLXML
Suporte de modelo XML avançado
Propriedade SqlXmlCommand.ClientSideXml
Você pode especificar a formatação do lado do cliente definindo essa propriedade das classes gerenciadas SQLXML como true.
Suporte a modelo XML aprimorado
A partir do SQL Server 2005, o modelo XML em SQL Server foi aprimorado com a adição do atributo do lado do cliente xml. Se esse atributo for definido como true, XML será formatado no cliente. Observe que esse atributo de modelo é idêntico na funcionalidade da propriedade ClientSideXML específica do provedor SQLXMLOLEDB.
Observação
Se você executar um modelo XML em um aplicativo ADO que esteja usando o Provedor SQLXMLOLEDB e especificar o atributo do lado do cliente xml no modelo e na propriedade ClientSideXML do provedor, o valor especificado no modelo terá precedência.
Consulte Também
Arquitetura de formatação XML no lado do cliente e no lado do servidor (SQLXML 4.0)
FOR XML (SQL Server)
Considerações de segurança de FOR XML (SQLXML 4.0)
Suporte ao tipo de dados xml no SQLXML 4.0
Classes gerenciadas SQLXML
Lado do cliente e Formatação XML do lado do servidor (SQLXML 4.0)
Objeto SqlXmlCommand (classes gerenciadas SQLXML)
Dados XML (SQL Server)