Partager via


La fonction ASCII retourne des résultats différents dans les tables de base de données Serveur de publication et Abonné

S’applique à : SQL Server 2019

Cet article fournit des solutions de contournement pour le problème lié au fait que la ASCII fonction retourne des résultats différents dans les tables de base de données du serveur de publication et de l’abonné.

Symptômes

Prenons l’exemple du scénario suivant :

  • Vous utilisez la réplication transactionnelle ou de fusion dans SQL Server 2019.

  • Le schéma initial et les données sont appliqués via le Agent d'instantané de réplication.

  • Dans la base de données du serveur de publication, une colonne définie en tant que type de données caractère inclut une valeur NULL : caractère ASCII 0 char(0).

Dans ce scénario, lorsque vous utilisez la ASCII fonction pour convertir la colonne dans les tables de base de données Serveur de publication et Abonné, différents résultats sont retournés. Vous pouvez vous référer à l’exemple suivant :

  • Convertissez la colonne (col1) dans la table de base de données du serveur de publication :

    SELECT id, col1, ASCII(col1) FROM PublisherTable
    

    Capture d’écran des résultats de la table de l’éditeur.

  • Convertissez la colonne (col1) dans la table de base de données Abonné :

    SELECT id, col1, ASCII(col1) FROM SubscriberTable
    

    Capture d’écran des résultats pour les tables d’abonnés.

Solution de contournement

  • Pour contourner ce problème pour la réplication transactionnelle, procédez comme suit :

    1. Ouvrez SQL Server Management Studio et connectez-vous au serveur agissant en tant que serveur de distribution.

    2. Sous Explorateur d'objets, développez SQL Server Agent, puis Travaux.

    3. Sélectionnez le travail de l’agent instantané pour la composition affectée, cliquez dessus avec le bouton droit, puis sélectionnez Propriétés>Étapes>Étape 2>Modifier.

    4. Dans la fenêtre Propriétés de l’étape du travail , ajoutez -NativeBcpFileFormatVersion 100 à la fin de la commande et sélectionnez OK pour enregistrer les modifications.

    5. Appliquez la dernière version du pilote Microsoft OLE DB :

      • Si l’agent de distribution (ou l’agent de fusion) s’exécute pour les abonnements par émission de données, appliquez-le sur le serveur de distribution.

      • Si l’agent de distribution (ou l’agent de fusion) s’exécute pour les abonnements par extraction, appliquez-le sur le serveur de l’Abonné.

    6. Renommez le fichier msoledbsql.dll dans le dossier C :\Program Files\Microsoft SQL Server\150\COM :

      • S’il s’agit d’un abonnement par émission de données, renommez le fichier dans le dossier sur le serveur de distribution.

      • S’il s’agit d’un abonnement par extraction de données, renommez le fichier dans le dossier sur le serveur de l’Abonné.

    7. Copiez le fichier msoledbsql.dll à partir du dossier C :\Windows\System32\ et collez-le dans le dossier C :\Program Files\Microsoft SQL Server\150\COM.

  • Pour contourner ce problème pour la réplication de fusion, procédez comme suit :

    1. Appliquez SQL Server mise à jour cumulative 15 (CU15) 2019 ou une version ultérieure sur le serveur de distribution.

    2. Suivez toutes les étapes appliquées au problème de réplication transactionnelle.