Compartir a través de


La función ASCII devuelve resultados diferentes en tablas de base de datos de publicador y suscriptor

Se aplica a: SQL Server 2019

En este artículo se proporcionan soluciones alternativas para el problema de que la ASCII función devuelve resultados diferentes en las tablas de base de datos publicador y suscriptor.

Síntomas

Imagine la siguiente situación:

  • La replicación transaccional o de combinación se usa en SQL Server 2019.

  • El esquema inicial y los datos se aplican a través del Agente de instantáneas de replicación.

  • En la base de datos del publicador, una columna que se define como tipo de datos de caracteres incluye un valor NULL: carácter ASCII 0 char(0).

En este escenario, cuando se usa la ASCII función para convertir la columna en las tablas de base de datos publisher y subscriber, se devuelven resultados diferentes. Puede hacer referencia al ejemplo siguiente:

  • Convierta la columna (col1) en la tabla de base de datos publisher:

    SELECT id, col1, ASCII(col1) FROM PublisherTable
    

    Captura de pantalla de los resultados de la tabla del publicador.

  • Convierta la columna (col1) en la tabla de base de datos del suscriptor:

    SELECT id, col1, ASCII(col1) FROM SubscriberTable
    

    Captura de pantalla de los resultados de las tablas del suscriptor.

Solución alternativa

  • Para solucionar este problema para la replicación transaccional, siga estos pasos:

    1. Abra SQL Server Management Studio y conéctese al servidor que actúa como distribuidor.

    2. En Explorador de objetos, expanda Agente SQL Server y, a continuación, expanda Trabajos.

    3. Seleccione el trabajo del agente de instantáneas para la publicación afectada, haga clic con el botón derecho en él y, a continuación, seleccione Propiedades>Pasos>paso 2>Editar.

    4. En la ventana Propiedades del paso de trabajo , agregue -NativeBcpFileFormatVersion 100 al final del comando y seleccione Aceptar para guardar los cambios.

    5. Aplique el controlador OLE DB de Microsoft más reciente:

      • Si el agente de distribución (o el agente de mezcla) se ejecuta para las suscripciones push, aplíquelo en el servidor del distribuidor.

      • Si el agente de distribución (o el agente de mezcla) se ejecuta para las suscripciones de extracción, aplíquelo en el servidor del suscriptor.

    6. Cambie el nombre del archivo msoledbsql.dll en la carpeta C:\Archivos de programa\Microsoft SQL Server\150\COM:

      • Si se trata de una suscripción de inserción, cambie el nombre del archivo en la carpeta del servidor del distribuidor.

      • Si se trata de una suscripción de extracción, cambie el nombre del archivo en la carpeta del servidor del suscriptor.

    7. Copie el archivo msoledbsql.dll de la carpeta C:\Windows\System32\ y péguelo en la carpeta C:\Archivos de programa\Microsoft SQL Server\150\COM.

  • Para solucionar este problema para la replicación de mezcla, siga estos pasos:

    1. Aplique SQL Server actualización acumulativa 15 (CU15) de 2019 o una versión posterior en el servidor del distribuidor.

    2. Siga todos los pasos que se aplican al problema de replicación transaccional.