Formatação XML do lado do cliente (SQLXML 4.0)
Aplica-se a: SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada de SQL do Azure
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 Construindo XML usando FOR XML.
SQLNCLI11 foi a primeira versão do provedor do SQL Server a entender completamente os tipos de dados introduzidos no SQL Server 2005 (9.x). O comportamento para FOR XML do lado do cliente com o provedor SQLOLEDB tratará os tipos de dados xml como cadeias de caracteres.
Importante
O SQL Server Native Client (SNAC) não é fornecido com:
- SQL Server 2022 (16.x) e versões posteriores
- SQL Server Management Studio 19 e versões posteriores
O SQL Server Native Client (SQLNCLI ou SQLNCLI11) e o Microsoft OLE DB Provider for SQL Server (SQLOLEDB) herdados não são recomendados para o desenvolvimento de novos aplicativos.
Para novos projetos, use um dos seguintes drivers:
Para SQLNCLI que é fornecido como um componente do Mecanismo de Banco de Dados do SQL Server (versões 2012 a 2019), confira esta exceção de Ciclo de Vida de Suporte.
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 as colunas FirstName e LastName) 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 os 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 client-side-xml é 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
Ao usar o provedor SQLXMLOLEDB ou as classes gerenciadas SQLXML, você pode 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 aprimorado a modelos XML
A partir do SQL Server 2005 (9.x), o modelo XML no SQL Server foi aprimorado com a adição do atributo xml do lado do cliente. Se esse atributo for definido como true, XML será formatado no cliente. Observe que esse atributo de modelo é idêntico em funcionalidade à 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 client-side-xml no modelo e a propriedade ClientSideXML do provedor, o valor especificado no modelo terá precedência.
Confira 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
Formatação XML do lado do cliente vs. do lado do servidor (SQLXML 4.0)
Objeto SqlXmlCommand (classes gerenciadas SQLXML)
Dados XML (SQL Server)