Condividi tramite


La funzione ASCII restituisce risultati diversi nelle tabelle di database server di pubblicazione e sottoscrittore

Si applica a: SQL Server 2019

Questo articolo fornisce soluzioni alternative per il problema che la ASCII funzione restituisce risultati diversi nelle tabelle di database del server di pubblicazione e del Sottoscrittore.

Sintomi

Considerare lo scenario descritto di seguito:

  • Si usa la replica transazionale o di tipo merge in SQL Server 2019.

  • Lo schema iniziale e i dati vengono applicati tramite il agente di snapshot di replica.

  • Nel database del server di pubblicazione, una colonna definita come tipo di dati carattere include un valore NULL - Carattere ASCII 0 char(0).

In questo scenario, quando si usa la ASCII funzione per convertire la colonna nelle tabelle di database Server di pubblicazione e Sottoscrittore, vengono restituiti risultati diversi. È possibile fare riferimento all'esempio seguente:

  • Convertire la colonna (col1) nella tabella del database publisher:

    SELECT id, col1, ASCII(col1) FROM PublisherTable
    

    Screenshot dei risultati per la tabella del server di pubblicazione.

  • Convertire la colonna (col1) nella tabella del database del Sottoscrittore:

    SELECT id, col1, ASCII(col1) FROM SubscriberTable
    

    Screenshot dei risultati per le tabelle del Sottoscrittore.

Soluzione alternativa

  • Per risolvere questo problema per la replica transazionale, seguire questa procedura:

    1. Aprire SQL Server Management Studio e connettersi al server che funge da server di distribuzione.

    2. In Esplora oggetti espandere SQL Server Agent e quindi Processi.

    3. Selezionare il processo dell'agente snapshot per la pubblicazione interessata, fare clic con il pulsante destro del mouse su di essa e quindi selezionare Proprietà>Passaggi>2>Modifica.

    4. Nella finestra Proprietà passaggio processo aggiungere -NativeBcpFileFormatVersion 100 alla fine del comando e selezionare OK per salvare le modifiche.

    5. Applicare la versione più recente del driver Microsoft OLE DB:

      • Se l'agente di distribuzione (o l'agente di merge) viene eseguito per le sottoscrizioni push, applicarlo nel server di distribuzione.

      • Se l'agente di distribuzione (o l'agente di merge) viene eseguito per le sottoscrizioni pull, applicarlo nel server del Sottoscrittore.

    6. Rinominare il file msoledbsql.dll nella cartella C:\Programmi\Microsoft SQL Server\150\COM:

      • Se si tratta di una sottoscrizione push, rinominare il file nella cartella nel server di distribuzione.

      • Se si tratta di una sottoscrizione pull, rinominare il file nella cartella nel server sottoscrittore.

    7. Copiare il file msoledbsql.dll dalla cartella C:\Windows\System32\ e incollarlo nella cartella C:\Programmi\Microsoft SQL Server\150\COM.

  • Per risolvere questo problema per la replica di tipo merge, seguire questa procedura:

    1. Applicare SQL Server 2019 Cumulative Update 15 (CU15) o una versione successiva nel server di distribuzione.

    2. Seguire tutti i passaggi applicati al problema di replica transazionale.