Compartilhar via


A função ASCII retorna resultados diferentes nas tabelas de banco de dados do Publicador e do Assinante

Aplica-se a: SQL Server 2019

Este artigo fornece soluções alternativas para o problema de que a ASCII função retorna resultados diferentes nas tabelas de banco de dados Publicador e Assinante.

Sintomas

Considere o cenário a seguir.

  • Você usa a replicação transacional ou de mesclagem no SQL Server 2019.

  • O esquema inicial e os dados são aplicados por meio do Replication Snapshot Agent.

  • No banco de dados do Publicador, uma coluna definida como tipo de dados de caractere inclui um valor NULL - caractere ASCII 0 char(0).

Nesse cenário, quando você usa a ASCII função para converter a coluna nas tabelas de banco de dados Publicador e Assinante, resultados diferentes são retornados. Você pode consultar o seguinte exemplo:

  • Converta a coluna (col1) na tabela do banco de dados do Publisher:

    SELECT id, col1, ASCII(col1) FROM PublisherTable
    

    Captura de tela dos resultados da tabela do editor.

  • Converta a coluna (col1) na tabela Banco de dados do assinante:

    SELECT id, col1, ASCII(col1) FROM SubscriberTable
    

    Captura de tela dos resultados das tabelas de assinantes.

Solução alternativa

  • Para contornar esse problema para replicação transacional, siga estas etapas:

    1. Abra o SQL Server Management Studio e conecte-se ao servidor que atua como um Distribuidor.

    2. Em Pesquisador de Objetos, expanda SQL Server Agent e, em seguida, expanda Trabalhos.

    3. Selecione o trabalho do agente de instantâneo para a publicação afetada, clique com o botão direito do mouse nele e selecione Propriedades>>Etapa 2>Editar.

    4. Na janela Propriedades da Etapa de Trabalho , adicione -NativeBcpFileFormatVersion 100 no final do comando e selecione OK para salvar as alterações.

    5. Aplique o driver Microsoft OLE DB mais recente:

      • Se o agente de distribuição (ou agente de mesclagem) for executado para assinaturas push, aplique-o no servidor do Distribuidor.

      • Se o agente de distribuição (ou agente de mesclagem) for executado para assinaturas pull, aplique-o no servidor do Assinante.

    6. Renomeie o arquivo msoledbsql.dll na pasta C:\Arquivos de Programas\Microsoft SQL Server\150\COM :

      • Se for uma assinatura push, renomeie o arquivo na pasta no servidor do Distribuidor.

      • Se for uma assinatura pull, renomeie o arquivo na pasta no servidor do Assinante.

    7. Copie o arquivo msoledbsql.dll da pasta C:\Windows\System32\ e cole-o na pasta C:\Arquivos de Programas\Microsoft SQL Server\150\COM.

  • Para contornar esse problema para replicação de mesclagem, siga estas etapas:

    1. Aplique a Atualização Cumulativa 15 (CU15) do SQL Server 2019 ou uma versão posterior no servidor do Distribuidor.

    2. Siga todas as etapas aplicadas ao problema de replicação transacional.