Désactiver des contraintes de clé étrangère pour la réplication

S’applique à : SQL Server 2016 (13.x) et versions ultérieures Base de données Azure SQL Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Vous pouvez désactiver les contraintes de clé étrangère lors de la réplication dans SQL Server à l’aide de SQL Server Management Studio ou de Transact-SQL. Cela peut être utile si vous publiez des données issues d'une version antérieure de SQL Server.

Remarque

Si une table est publiée à l'aide du processus de réplication, les contraintes de clé étrangère sont automatiquement désactivées lors des opérations effectuées par les Agents de réplication. L'option NOT FOR REPLICATION est spécifiée par défaut pour les contraintes de clé étrangère et les contraintes de validation, les contraintes étant renforcées pour les opérations d'utilisateurs mais pas pour les opérations d'agents. Lorsqu'un Agent de réplication effectue une requête Insert, Update ou Delete vers un abonné, la contrainte n'est pas vérifiée ; si c'est un utilisateur qui effectue la requête Insert, Update ou Delete, la contrainte est vérifiée. La contrainte est désactivée pour l'Agent de réplication, car elle était déjà vérifiée au niveau de l'éditeur lorsque les données ont été insérées, mises à jour ou supprimées à l'origine.

Autorisations

Requiert une autorisation ALTER sur la table.

Utiliser SQL Server Management Studio

Pour désactiver une contrainte de clé étrangère lors de la réplication

  1. Dans l' Explorateur d'objets, développez la table avec la contrainte de clé étrangère que vous souhaitez modifier, puis développez le dossier Clés .

  2. Cliquez avec le bouton droit sur la contrainte de clé étrangère, puis sélectionnez Modifier.

  3. Dans la boîte de dialogue Relations de clé étrangère , sélectionnez la valeur Non pour Appliquer la réplication.

  4. Sélectionnez Fermer.

Utiliser Transact-SQL

Pour désactiver une contrainte de clé étrangère lors de la réplication

  1. Pour effectuer cette tâche dans Transact-SQL, supprimez la contrainte de clé étrangère. Dans l' Explorateur d'objets, développez la table avec la contrainte de clé étrangère que vous souhaitez modifier, puis développez le dossier Clés .

  2. Cliquez avec le bouton droit sur la contrainte de clé étrangère, sélectionnez Générer un script de la clé en tant que, puis sélectionnez DROP et CREATE dans, puis sélectionnez Nouvelle fenêtre d’éditeur de requête. Le script obtenu doit ressembler à l’exemple suivant de l’exemple de base de données 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. Dans la partie du script ALTER TABLE ... ADD CONSTRAINT, modifiez la nouvelle contrainte de clé étrangère et spécifiez l’option NOT FOR REPLICATION. Par exemple :

    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
    

Étapes suivantes