Novidades no SQLXML 4.0 SP1
Aplica-se a: SQL Server Banco de Dados SQL do Azure
O Microsoft SQLXML 4.0 SP1 inclui várias atualizações e aprimoramentos. Este tópico resume as atualizações e fornece links a informações mais detalhadas. O SQLXML 4.0 SP1 oferece aprimoramentos adicionais para suportar os novos tipos de dados introduzidos no SQL Server 2008 (10.0.x). Este tópico abrange os seguintes assuntos:
Instalação do SQLXML 4.0 SP1
Problemas da instalação lado a lado
SQLXML 4.0 e MSXML
Redistribuição do SQLXML 4.0
Suporte para SQL Server Native Client
Suporte para tipos de dados introduzidos no SQL Server 2005 (9.x)
Alterações no XML Bulk Load para o SQLXML 4.0
Alterações de chave de registro para o SQLXML 4.0
Problemas de migração
Instalação do SQLXML 4.0 SP1
Antes do SQL Server 2008 (10.0.x), o SQLXML 4.0 era lançado com o SQL Server e fazia parte da instalação padrão de todas as versões do SQL Server, exceto o SQL Server Express. A partir do SQL Server 2008 (10.0.x), a versão mais recente do SQLXML (SQLXML 4.0 SP1) não está mais incluída no SQL Server. Para instalar o SQLXML 4.0 SP1, baixe-o em Local de instalação do SQLXML 4.0 SP1.
Os arquivos do SQLXML 4.0 SP1 são instalados no seguinte local:
%PROGRAMFILES%\SQLXML 4.0\
Observação
Todas as configurações adequadas de registro são feitas para o SQLXML 4.0 como parte do processo de instalação.
Para permitir que os aplicativos SQLXML de 32 bits sejam executados no Windows on Windows (WOW64) em sistemas operacionais Windows de 64 bits, execute o pacote SQLXML 4.0 SP1 de 64 bits, chamado sqlxml4.msi, que está disponível no Centro de download.
Desinstalação do SQLXML 4.0 SP1
Existem chaves de registro compartilhadas entre o SQLXML 3.0 SP3, o SQLXML 4.0 e o SQLXML 4.0 SP1. Se as versões posteriores do SQLXML forem desinstaladas no mesmo computador que contém o SQLXML 3.0 SP3, talvez seja necessário reinstalar o SQLXML 3.0 SP3.
Problemas da instalação lado a lado
O processo de instalação para SQLXML 4.0 não remove os arquivos que foram instalados pelas versões anteriores do SQLXML. Portanto, você pode ter DLLs para várias instalações de versões diferentes do SQLXML em seu computador. É possível executar as instalações lado a lado. O SQLXML 4.0 inclui tanto ProgIDs dependentes de versão como independentes de versão. Todos os aplicativos de produção devem usar PROGIDs dependentes de versão.
SQLXML 4.0 SP1 e MSXML
O SQLXML 4.0 não instala o MSXML. O SQLXML 4.0 usa o MSXML 6.0, que é instalado como parte da instalação do SQL Server 2005 (9.x) ou posterior.
Redistribuição do SQLXML 4.0 SP1
É possível distribuir o SQLXML 4.0 SP1 usando o pacote do instalador redistribuível. Uma maneira de instalar vários pacotes em um processo que, para o usuário, parece ser uma única instalação é usar a tecnologia de encadeador e bootstrapper. Para obter mais informações, confira Criando um pacote de bootstrapper personalizado para o Visual Studio 2005 e Adicionando pré-requisitos personalizados.
Se o aplicativo foi projetado para uma plataforma diferente daquela em que foi desenvolvido, você poderá baixar as versões do sqlncli.msi para x64, Itanium e x86 do Centro de Download da Microsoft.
Também há programas de instalação de redistribuição separados o MSXML 6.0 (msxml6.msi). Elas podem ser encontradas no CD de instalação do SQL Server, no seguinte local:
%CD%\Setup\
Esses arquivos de instalação podem ser usados para instalar o MSXML 6.0 diretamente do CD. Eles também podem ser usados, de forma independente, para redistribuir o MSXML 6.0 junto com o SQLXML 4.0 SP1 com seus próprios aplicativos personalizados.
Você também precisará redistribuir o SQL Server Native Client se estiver usando-o como provedor de dados em seu aplicativo. Para obter mais informações, consulte Instalando o SQL Server Native Client.
Suporte para SQL Server Native Client
O SQLXML 4.0 é compatível com os provedores SQLOLEDB e SQL Server Native Client. Recomenda-se que você use a mesma versão do provedor do SQL Server Native Client e do SQL Server, pois o SQL Server Native Client é desenvolvido para oferecer suporte a todos os novos tipos de dados fornecidos no servidor, como os tipos de dados Date, Time, DateTime2 e dateTimeOffset no SQL Server 2008 (10.0.x) e suportados pelo SQL Server Native Client.
Observação
O SQL Server Native Client foi removido no SQL Server 2022 (16.x).
O SQL Server Native Client é uma tecnologia de acesso a dados que foi introduzida no SQL Server 2005 (9.x). Ela reúne o provedor SQLOLEDB e o driver SQLODBC em uma única DLL (dynamic link library) nativa fornecendo, ao mesmo tempo, uma nova funcionalidade separada e diferente do MDAC (Microsoft Data Access Components).
O SQL Server Native Client pode ser usado para criar novos aplicativos ou aprimorar os aplicativos existentes que precisam aproveitar os recursos introduzidos no SQL Server que não são compatíveis com o SQLOLEDB e o SQLODBC no MDAC e no Microsoft Windows. Por exemplo, o SQL Server Native Client é necessário para que os recursos SQLXML do lado do cliente, como FOR XML, usem o tipo de dados xml. Para obter mais informações, consulte Formatação XML do lado do cliente (SQLXML 4.0), Uso do ADO para executar consultas SQLXML 4.0 e Programação de cliente nativo do SQL Server.
Observação
O SQLXML 4.0 não é totalmente compatível com o SQLXML 3.0. Pelo fato de haver algumas correções de bug e outras alterações funcionais, particularmente a remoção do suporte a SQLXML ISAPI, você não pode usar diretórios virtuais IIS com o SQLXML 4.0. Embora a maioria dos aplicativos será executada com pequenas modificações, você deve testá-los antes de os colocar em produção com o SQLXML 4.0.
Suporte para tipos de dados introduzidos no SQL Server 2005 e no SQL Server 2008
O SQL Server 2005 (9.x) introduziu o tipo de dados xml, e o SQLXML 4.0 suporta o tipo de dados xml. Para obter mais informações, consulte Suporte a tipos de dados xml no SQLXML 4.0.
Para obter exemplos de como usar o tipo de dados xml no SQLXML ao mapear exibições XML, carregar XML em massa ou executar programas de atualização XML, consulte os exemplos fornecidos nos tópicos a seguir.
O SQL Server 2008 (10.0.x) introduziu os tipos de dados Date, Time, DateTime2 e DateTimeOffset. O SQLXML 4.0 SP1 habilitará esses quatro novos tipos de dados como tipos escalares integrados quando usados com o SQL Server Native Client OLE DB Provider (SQLNCLI11), que vem com o SQL Server 2012 (11.x).
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 provedor OLE DB para SQL Server (SQLOLEDB) da Microsoft herdado não são recomendados para desenvolver um novo aplicativo.
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.
Alterações no XML Bulk Load para o SQLXML 4.0 SP1
Para o SQLXML 4.0, o campo de excedente SchemaGen é criado usando o tipo de dados xml. Para obter mais informações, consulte Modelo de objeto de carregamento em massa XML do SQL Server.
Se você tiver criado aplicativos do Microsoft Visual Basic anteriormente e quiser usar o SQLXML 4.0, deverá recompilar o aplicativo com referência a Xblkld4.dll.
No caso dos aplicativos do Visual Basic Scripting Edition, você deve registrar a DLL que deseja usar. No seguinte exemplo, se você especificar os ProgIDs independentes de versão, o aplicativo dependerá da última DLL registrada:
set objBulkLoad = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad")
Observação
O PROGID dependente de versão é o SQLXMLBulkLoad.SQLXMLBulkLoad.4.0.
Alterações de chave de registro para o SQLXML 4.0
No SQLXML 4.0, as chaves de registro foram alteradas em relação às versões anteriores no seguinte:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SQLXML4\TemplateCacheSize
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SQLXML4\SchemaCacheSize
Você deve alterar as configurações se quiser que essas chaves entrem em vigor no SQLXML 4.0.
Além disso, o SQLXML 4.0 introduz as seguintes chaves de registro:
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\ReportErrorsWithSQLInfo
Por padrão, o SQLXML 4.0 retorna informações de erro nativas fornecidas pelo OLE DB e pelo SQL Server, em vez de um erro de alto nível do SQLXML (como era o caso nas versões anteriores do SQLXML). Se você não quiser esse comportamento, o valor desta chave de registro de tipo Dword deverá ser definido como 0 (o padrão é 1).
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\FORXML_GenerateGUIDBraces
Por padrão, o SQLXML retorna valores GUID do SQL Server sem os colchetes. Se quiser que o valor GUID seja retornado com as chaves (por exemplo, {some GUID}), o valor dessa chave do Registro deverá ser definido como 1 (o padrão é 0).
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Client\SQLXML4\SQL2000CompatMode
Por padrão, quando o analisador XML carrega os dados, os espaços em branco são normalizados de acordo com as regras do XML 1.0. Isso resulta na perda de alguns dos caracteres com espaço em branco em seus dados. Assim, a representação textual de seus dados pode não ser a mesma depois da análise, embora os dados sejam semanticamente os mesmos.
Essa chave é introduzida para que você possa escolher manter os caracteres com espaço em branco nos dados. Se você adicionar essa chave de registro e definir seu valor como 0, os caracteres com espaço em branco (LF, CR e tab) no XML serão retornados codificados em caso de valores de atributo. No caso de valores de elemento, somente CR é retornado codificado.
Por exemplo:
CREATE TABLE T( Col1 int, Col2 nvarchar(100)); GO -- Insert data with tab, line feed and carriage return). INSERT INTO T VALUES (1, 'This is a tab . This is a line feed and CR more text'); GO -- Test this query (without the registry key). SELECT * FROM T FOR XML AUTO; -- This is the result (no encoding of special characters). <?xml version="1.0" encoding="utf-8" ?> <r> <T Col1="1" Col2="This is a tab . This is a line feed and CR more text"/> </r> -- Now add registry key with value 0 and execute the query again. -- Note the encoding for carriage return, line-feed and tab in the attribute value. <?xml version="1.0" encoding="utf-8" ?> <r> <T Col1="1" Col2="This is a tab . This is a line feed and CR more text"/> </r> -- Update the query and specify ELEMENTS directive SELECT * FROM T FOR XML AUTO, ELEMENTS -- Only the carriage return is returned encoded. <?xml version="1.0" encoding="utf-8" ?> <r> <T> <Col1>1</Col1> <Col2>This is a tab . This is a line feed and CR more text</Col2> </T> </r>
Problemas de migração
A seguir, são citadas algumas questões que poderiam impactar a migração de seus aplicativos SQLXML herdados para o SQLXML 4.0.
Consultas ADO e SQLXML 4.0
Nas versões anteriores do SQLXML, havia suporte para a execução de consultas baseadas em URL usando diretórios virtuais IIS e o filtro ISAPI SQLXML. Para aplicativos que usam SQLXML 4.0, este suporte não está mais disponível.
Em vez disso, as consultas, modelos e diagramas de atualização SQLXML podem ser executados com as extensões SQLXML para ADO (ActiveX Data Objects) introduzidas pela primeira vez no MDAC (Microsoft Data Access Components) 2.6 e versão posterior.
Para obter mais informações, consulte Usar o ADO para executar consultas SQLXML 4.0.
Suporte para SQLXML 3.0 ISAPI e tipos de dados introduzidos no SQL Server 2005
Como o suporte à ISAPI foi removido do SQLXML 4.0, se a sua solução exigir os recursos aprimorados de tipagem de dados introduzidos no SQL Server 2005 (9.x), como o tipo de dados xml ou tipos de dados definidos pelo usuário (UDTs) e acesso baseado na Web, será necessário usar outra solução, como classes gerenciadas do SQLXML ou outro tipo de manipulador de HTTP, como Serviços Web XML Nativos para SQL Server 2005.
Como alternativa, se você não precisar dessas extensões de tipo, poderá continuar a usar o SQLXML 3.0 para se conectar às instalações do SQL Server 2005 (9.x) e do SQL Server 2008 (10.0.x). O suporte à ISAPI do SQLXML 3.0 funcionará com essas versões posteriores, mas não oferecerá suporte nem reconhecerá o tipo de dados xml ou o suporte ao tipo de UDT introduzido no SQL Server 2005 (9.x).
Alterações de segurança do XML Bulk Load para arquivos temporários
Para o SQLXML 4.0 e o SQL Server, as permissões do arquivo XML de carregamento em massa são concedidas ao usuário que executa a operação de carregamento em massa. As permissões de leitura e gravação são herdadas do sistema de arquivos. Nas versões anteriores do SQLXML e SQL Server, o XML Bulk Load em SQLXML criava arquivos temporários que não eram seguros e que podiam ser lidos por qualquer pessoa.
Problemas de migração para FOR XML do lado do cliente
Devido a alterações no mecanismo de execução, o SQL Server pode retornar valores diferentes nos metadados de uma tabela de base do que seriam retornados se a consulta FOR XML fosse executada no SQL Server 2000 (8.x). Nesses casos, a formatação no lado do cliente dos resultados de consulta FOR XML terá uma saída diferente dependendo da versão em que a consulta estiver sendo executada.
Se uma consulta FOR XML for executada no lado do cliente usando o SQLXML 3.0 em uma coluna de tipo de dados xml, os dados nos resultados retornarão como uma cadeia de caracteres totalmente definida como entidade. No SQLXML 4.0, se o SQL Server Native Client (SQLNCLI11) for especificado como provedor, os dados serão retornados como XML.