Controlar restricciones, identidades y desencadenadores con NOT FOR REPLICATION

En algunos casos, es conveniente tratar de distinta manera la actividad del usuario y del agente en una topología de replicación. Por ejemplo, si un usuario inserta una fila en el publicador y esa inserción satisface una restricción CHECK en la tabla, es posible que no sea necesario exigir la misma restricción cuando un agente de replicación inserte la fila en el suscriptor. La opción NOT FOR REPLICATION permite especificar que los siguientes objetos de la base de datos se traten de manera distinta cuando un agente de replicación realiza una operación:

  • Restricciones de clave externa

    La restricción de clave externa no se aplica cuando un agente de replicación realiza una operación de inserción, actualización o eliminación.

  • Restricciones CHECK

    La restricción CHECK no se aplica cuando un agente de replicación realiza una operación de inserción, actualización o eliminación.

  • Columnas de identidad

    El valor de la columna de identidad no se incrementa cuando un agente de replicación realiza una operación de inserción.

  • Desencadenadores

    El desencadenador no se ejecuta cuando un agente de replicación realiza una operación de inserción, actualización o eliminación.

Cuando se publica una tabla, las opciones de esquema controlan la manera en la que se crean los objetos en la base de datos de suscripciones. Las opciones de esquema predeterminadas difieren por publicación. Cuando las opciones se establecen para especificar que las restricciones de clave externa y las restricciones de comprobación se crean en la base de datos de suscripciones, se establece la opción NOT FOR REPLICATION.La opción NOT FOR REPLICATION también se establece cuando se replican columnas de identidad en publicaciones de mezcla y transaccionales compatibles con suscripciones actualizables. Para obtener más información acerca de la replicación de las columnas de identidad, vea Replicar columnas de identidad.

En la mayoría de los casos, la configuración predeterminada es apropiada, pero se puede cambiar si una aplicación requiere un comportamiento distinto. El área principal que hay que considerar son los desencadenadores. Por ejemplo, si define un desencadenador de inserción con la opción NOT FOR REPLICATION establecida, todas las inserciones del usuario activarán el desencadenador, pero no lo harán las inserciones de los agentes de replicación. Considere un desencadenador que inserta datos en una tabla de seguimiento: cuando el usuario inserta originalmente la fila, es apropiado que el desencadenador se active e inserte una fila en la tabla de seguimiento; sin embargo, no debería activarse cuando los datos se replican en el suscriptor, ya que se insertaría una fila innecesaria en la tabla de seguimiento.

Para especificar la opción NOT FOR REPLICATION

La opción NOT FOR REPLICATION se puede especificar de las siguientes formas: