Compartir vía


Deshabilitación de restricciones de clave externa para la replicación

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Puede deshabilitar las restricciones de clave externa para la replicación en SQL Server usando SQL Server Management Studio o Transact-SQL. Esto puede ser útil si se publican datos de una versión anterior de SQL Server.

Nota:

Si se publica la tabla mediante replicación, se deshabilitan automáticamente las restricciones FOREIGN KEY para las operaciones realizadas por los agentes de replicación. La opción NOT FOR REPLICATION se especifica de manera predeterminada para las restricciones de clave externa y las restricciones CHECK; las restricciones se exigen para las operaciones de usuario, pero no para las operaciones de agente. Cuando un agente de replicación realiza una inserción, actualización o eliminación en un suscriptor, no se comprueba la restricción. En cambio, sí se comprueba cuando lo hace un usuario. La restricción se deshabilitará para el agente de replicación porque ya se comprobó en el publicador cuando se insertaron, actualizaron o eliminaron los datos originalmente.

Permisos

Requiere el permiso ALTER en la tabla.

Uso de SQL Server Management Studio

Para deshabilitar una restricción FOREIGN KEY para la replicación

  1. En el Explorador de objetos, expanda la tabla con la restricción de clave externa que desee modificar y, a continuación, expanda la carpeta Claves .

  2. Haga clic con el botón derecho en la restricción de clave externa y, luego, seleccione Modificar.

  3. En el cuadro de diálogo Relaciones de clave externa , seleccione el valor No para Exigir para replicación.

  4. Seleccione Close (Cerrar).

Uso de Transact-SQL

Para deshabilitar una restricción FOREIGN KEY para la replicación

  1. Para realizar esta tarea en Transact-SQL, genere un script para la restricción de clave externa. En el Explorador de objetos, expanda la tabla con la restricción de clave externa que desee modificar y, a continuación, expanda la carpeta Claves .

  2. Haga clic con el botón derecho en la restricción de clave externa, seleccione Incluir clave como, después DROP y CREATE To y luego New Query Editor Window. El script resultante debe ser similar al ejemplo siguiente de la base de datos de ejemplo AdventureWorks2022:

    ALTER TABLE [Sales].[SalesTerritoryHistory] 
    DROP CONSTRAINT [FK_SalesTerritoryHistory_SalesPerson_BusinessEntityID]
    GO
    
    ALTER TABLE [Sales].[SalesTerritoryHistory]  WITH CHECK 
    ADD CONSTRAINT [FK_SalesTerritoryHistory_SalesPerson_BusinessEntityID] 
    FOREIGN KEY([BusinessEntityID])
    REFERENCES [Sales].[SalesPerson] ([BusinessEntityID]);
    GO
    
    ALTER TABLE [Sales].[SalesTerritoryHistory] 
    CHECK CONSTRAINT [FK_SalesTerritoryHistory_SalesPerson_BusinessEntityID]
    GO
    
  3. En la parte ALTER TABLE ... ADD CONSTRAINT del script, modifique la nueva restricción de clave externa y especifique la opción NOT FOR REPLICATION. Por ejemplo:

    ALTER TABLE [Sales].[SalesTerritoryHistory] 
    DROP CONSTRAINT [FK_SalesTerritoryHistory_SalesPerson_BusinessEntityID]
    GO
    
    ALTER TABLE [Sales].[SalesTerritoryHistory]  WITH CHECK 
    ADD CONSTRAINT [FK_SalesTerritoryHistory_SalesPerson_BusinessEntityID] 
    FOREIGN KEY([BusinessEntityID]) 
    REFERENCES [Sales].[SalesPerson] ([BusinessEntityID]) 
    NOT FOR REPLICATION; --added to disable constraint for replication
    GO
    
    ALTER TABLE [Sales].[SalesTerritoryHistory] 
    CHECK CONSTRAINT [FK_SalesTerritoryHistory_SalesPerson_BusinessEntityID]
    GO
    

Pasos siguientes