Leer en inglés

Compartir a través de


Un controlador de lógica de negocios de SQL Server personalizado reemplaza una cadena vacía por un carácter de fin de cadena.

Este artículo le ayuda a resolver el problema que se produce cuando se usa un controlador de lógica de negocios personalizado en SQL Server.

Versión original del producto: SQL Server 2008 Standard, SQL Server 2008 Enterprise, SQL Server 2008 R2 Standard, SQL Server 2008 R2 Enterprise, SQL Server 2008 R2 Datacenter, SQL Server 2012 Standard, SQL Server 2012 Enterprise, SQL Server 2012 Developer
Número de KB original: 2598605

Síntomas

Considere el caso siguiente:

  • La replicación de mezcla se configura en Microsoft SQL Server 2012, en Microsoft SQL Server 2008 R2 o en Microsoft SQL Server 2008.
  • La publicación contiene un artículo de tabla.
  • El artículo de tabla contiene una columna de tipo varcharde datos .
  • La varchar columna contiene una cadena vacía ('').

Nota

Este problema no se produce con un valor NULL o un valor de espacio único (' ').

  • Configure el artículo de tabla para usar un controlador de lógica de negocios personalizado.
  • El controlador de lógica de negocios personalizado controla los eventos que se producen durante la sincronización de replicación de mezcla.
  • El controlador de lógica de negocios personalizado usa un conjunto de datos personalizado para devolver la fila.

En este escenario, aunque no se devuelve ningún error, el controlador de lógica de negocios personalizado reemplaza la cadena vacía por un solo end-of-string carácter. Por ejemplo, el controlador de lógica de negocios personalizado reemplaza la cadena vacía por una de las siguientes cadenas:

  • 'ASC0'
  • "0x00"
  • '\0' No se ve afectado ningún otro dato.

Causa

Este problema se produce debido a cómo los componentes del agente de mezcla y el controlador de lógica de negocios pasan datos dentro y fuera de las variables intermedias.

Solución alternativa

Es posible que pueda solucionar este problema mediante el nvarchar tipo de datos en lugar del varchar tipo de datos.

Más información

El problema que se describe en la sección Síntomas puede producirse si el controlador de lógica de negocios personalizado controla instrucciones conflictivas UPDATE en el publicador y el suscriptor. La cadena vacía se reemplaza por el carácter único end-of-string después de copiar el conjunto de datos del publicador o suscriptor en el conjunto de datos personalizado y, a continuación, se pasa el conjunto de datos personalizado al reconciliador de replicación de mezcla.

Además, este problema se produce si los datos no cambian en código personalizado similar al siguiente:

C#
public override ActionOnUpdateConflict UpdateConflictsHandler(..., ref customDataSet, ...)
{
    customDataSet = publisherDataSet.Copy();
    conflictLogType = ConflictLogType.ConflictLogPublisher;
    return ActionOnUpdateConflict.AcceptCustomConflictData;
}