Partilhar via


O que há de novo no SQLXML 4.0 SP1

Aplica-se a:SQL ServerBanco 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 para informações mais detalhadas, quando disponíveis. O SQLXML 4.0 SP1 fornece aprimoramentos adicionais para dar suporte aos novos tipos de dados introduzidos no SQL Server 2008 (10.0.x). Este tópico inclui os seguintes assuntos:

  • Instalando o SQLXML 4.0 SP1

  • Problemas de instalação lado a lado

  • SQLXML 4.0 e MSXML

  • Redistribuindo o SQLXML 4.0

  • Suporte para SQL Server Native Client

  • Suporte para tipos de dados introduzidos no SQL Server 2005 (9.x)

  • Alterações no Carregamento em Massa de XML para o SQLXML 4.0

  • Alterações de chave do Registro para SQLXML 4.0

  • Questões de migração

Instalando o 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 de Local de Instalação do SQLXML 4.0 SP1.

Os arquivos SQLXML 4.0 SP1 são instalados no seguinte local:

%PROGRAMFILES%\SQLXML 4.0\

Observação

Todas as configurações de registro apropriadas para SQLXML 4.0 são feitas como parte do processo de instalação.

Para permitir que aplicativos SQLXML de 32 bits sejam executados no Windows no Windows (WOW64) em sistemas operacionais Windows de 64 bits, execute o pacote SQLXML 4.0 SP1 de 64 bits, chamado sqlxml4.msi, que pode ser encontrado no Centro de Download.

Desinstalando o SQLXML 4.0 SP1

Existem chaves de registo partilhadas entre SQLXML 3.0 SP3, SQLXML 4.0 e 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 de instalação lado a lado

O processo de instalação do SQLXML 4.0 não remove os arquivos que foram instalados por versões anteriores do SQLXML. Portanto, você pode ter DLLs para várias instalações diferentes com distinções de versão do SQLXML no seu computador. Você pode executar as instalações lado a lado. O SQLXML 4.0 inclui PROGIDs independentes de versão e dependentes de versão. Todos os aplicativos de produção devem usar PROGIDs dependentes da versão.

SQLXML 4.0 SP1 e MSXML

SQLXML 4.0 não instala 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.

Redistribuindo o SQLXML 4.0 SP1

Você pode distribuir o SQLXML 4.0 SP1 usando o pacote do instalador redistribuível. Uma maneira de instalar vários pacotes, de forma que para o utilizador pareça uma única instalação, é usar as tecnologias chainer e bootstrapper. Para obter mais informações, consulte Criação de um pacote de bootstrapper personalizado para Visual Studio 2005 e Adicionando pré-requisitos personalizados.

Se o seu aplicativo tiver como alvo uma plataforma diferente daquela em que foi desenvolvido, você poderá baixar versões do sqlncli.msi para x64, Itanium e x86 no Centro de Download da Microsoft.

Há também programas de instalação de redistribuição separados para MSXML 6.0 (msxml6.msi). Eles podem ser encontrados 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 para redistribuir livremente 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 o provedor de dados com seu aplicativo. Para obter mais informações, consulte Instalando o SQL Server Native Client.

Suporte para SQL Server Native Client

O SQLXML 4.0 oferece suporte aos provedores SQLOLEDB e SQL Server Native Client. É recomendável que você use a mesma versão do provedor do SQL Server Native Client e do SQL Server porque o SQL Server Native Client é desenvolvido para dar suporte a quaisquer 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). Ele combina o provedor SQLOLEDB e o driver SQLODBC em uma biblioteca de vínculo dinâmico (DLL) nativa, ao mesmo tempo em que fornece uma nova funcionalidade separada e distinta do Microsoft Data Access Components (MDAC).

O SQL Server Native Client pode ser usado para criar novos aplicativos ou aprimorar aplicativos existentes que precisam aproveitar os recursos introduzidos no SQL Server que não são suportados pelo SQLOLEDB e SQLODBC no MDAC e no Microsoft Windows. Por exemplo, o SQL Server Native Client é necessário para recursos SQLXML do lado do cliente, como FOR XML, para usar o xml tipo de dados. Para obter mais informações, consulte Formatação XML do lado do cliente (SQLXML 4.0), Usando o ADO para executar consultas SQLXML 4.0e SQL Server Native Client Programming.

Observação

O SQLXML 4.0 não é completamente compatível com versões anteriores do SQLXML 3.0. Devido a algumas correções de bugs e outras alterações funcionais, particularmente a remoção do suporte a ISAPI SQLXML, não é possível usar diretórios virtuais do IIS com SQLXML 4.0. Embora a maioria dos aplicativos seja executada com pequenas modificações, você deve testá-los antes de colocá-los em produção com o SQLXML 4.0.

Suporte para tipos de dados introduzidos no SQL Server 2005 e SQL Server 2008

O SQL Server 2005 (9.x) introduziu o tipo de dados xml e o SQLXML 4.0 oferece suporte ao tipo de dados xml. Para obter mais informações, consulte Suporte de Tipos de Dados XML no SQLXML 4.0.

Para obter exemplos de como usar o xml tipo de dados no SQLXML ao mapear exibições XML, carregar XML em massa ou executar diagramas 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, TimeDateTime2e DateTimeOffset. O SQLXML 4.0 SP1 habilitará esses quatro novos tipos de dados como tipos escalares internos quando usados com o SQL Server Native Client OLE DB Provider (SQLNCLI11), que é fornecido no SQL Server 2012 (11.x).

Importante

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) herdado não são recomendados para o desenvolvimento de novos aplicativos.

Para novos projetos, use um dos seguintes drivers:

Para o SQLNCLI fornecido como componente do Mecanismo de Banco de Dados do SQL Server (versões de 2012 a 2019), consulte esta exceção do Ciclo de Vida do Suporte .

Alterações de carregamento em massa de XML para SQLXML 4.0 SP1

  • Para o SQLXML 4.0, o campo de estouro SchemaGen é criado utilizando o tipo de dados xml . Para obter mais informações, consulte SQL Server XML Bulk Load Object Model.

  • Se você criou anteriormente aplicativos do Microsoft Visual Basic e deseja usar o SQLXML 4.0, você deve recompilar o aplicativo com referência a Xblkld4.dll.

  • Para aplicativos Visual Basic Scripting Edition, você deve registrar a DLL que deseja usar. No exemplo a seguir, se você especificar PROGIDs independentes de versão, o aplicativo dependerá da última DLL registrada:

    set objBulkLoad = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad")   
    

    Observação

    O PROGID dependente da versão é SQLXMLBulkLoad.SQLXMLBulkLoad.4.0.

Alterações de chave do Registro para SQLXML 4.0

No SQLXML 4.0, as chaves do Registro foram alteradas das versões anteriores para as seguintes:

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 estejam em vigor para o SQLXML 4.0.

Além disso, o SQLXML 4.0 introduz as seguintes chaves do 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 SQLXML de alto nível (como era o caso em versões anteriores do SQLXML). Se você não quiser esse comportamento, o valor dessa chave do Registro do tipo DWORD deve 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 as chavetas anexas. Se desejar que o valor GUID seja retornado com as chavetas (por exemplo, {algum GUID}), o valor dessa entrada de registo deve 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 de espaço em branco em seus dados. Assim, a representação textual dos seus dados pode não ser a mesma após a análise, embora semanticamente os dados sejam os mesmos.

    Essa chave é introduzida para que você possa optar por manter os caracteres de espaço em branco nos dados. Se você adicionar essa chave do Registro e definir seu valor como 0, os caracteres de espaço em branco (LF, CR e tab) no XML serão retornados codificados no 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>  
    

Questões de migração

A seguir estão os problemas que podem afetar a migração de seus aplicativos SQLXML herdados para o SQLXML 4.0.

Consultas de ADO e SQLXML 4.0

Em versões anteriores do SQLXML, era fornecido suporte para execução de consultas baseadas em URL usando diretórios virtuais do IIS e o filtro ISAPI SQLXML. Para aplicativos que usam SQLXML 4.0, esse suporte não está mais disponível.

Em vez disso, consultas, modelos e diagramas de atualização SQLXML podem ser executados usando as extensões SQLXML para ActiveX Data Objects (ADO) introduzidas pela primeira vez no Microsoft Data Access Components (MDAC) 2.6 e posterior.

Para obter mais informações, consulte Usando o ADO para executar consultas SQLXML 4.0.

Capacidade de suporte para ISAPI SQLXML 3.0 e tipos de dados introduzidos no SQL Server 2005

Como o suporte a ISAPI foi removido do SQLXML 4.0, se sua solução exigir os recursos avançados de digitação de dados introduzidos no SQL Server 2005 (9.x), como o de tipo de dados xml ou de tipos de dados definidos pelo usuário (UDTs) e acesso baseado na Web, você precisará usar outra solução, como classes gerenciadas SQLXML ou outro tipo de manipulador HTTP, como XML Web Services 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 a ISAPI do SQLXML 3.0 funcionará em relação a essas versões posteriores, mas não oferece suporte nem reconhece o tipo de dados xml ou o suporte ao tipo UDT introduzido no SQL Server 2005 (9.x).

Alterações de segurança de carregamento em massa XML para arquivos temporários

Para SQLXML 4.0 e SQL Server, as permissões de arquivo XML Bulk Load 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. Em versões anteriores do SQLXML e do SQL Server, o XML Bulk Load em SQLXML criava arquivos temporários que não eram protegidos e podiam ser lidos por qualquer pessoa.

Problemas de migração para Client-Side FOR XML

Devido a alterações no mecanismo de execução, o SQL Server pode retornar valores diferentes nos metadados de uma tabela base que seriam retornados se a consulta FOR XML fosse executada no SQL Server 2000 (8.x). Nos casos em que isso ocorre, a formatação do lado do cliente dos resultados da consulta FOR XML terá uma saída diferente, dependendo da versão em que a consulta é executada.

Se uma consulta FOR XML for executada no lado do cliente usando SQLXML 3.0 em uma coluna de tipo de dados xml, os dados nos resultados retornarão como uma cadeia de caracteres totalmente entitizada. No SQLXML 4.0, se o SQL Server Native Client (SQLNCLI11) for especificado como o provedor, os dados serão retornados como XML.