Disabilitare i vincoli di chiave esterna per la replica

Si applica a: SQL Server 2016 (13.x) e versioni successiveDatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsPiattaforma di strumenti analitici (PDW)

È possibile disabilitare un vincolo di chiave esterna per la replica in SQL Server usando SQL Server Management Studio o Transact-SQL. Questa opzione può risultare utile se si pubblicano dati di una versione precedente di SQL Server.

Nota

Se una tabella viene pubblicata usando la replica, i vincoli di chiave esterna vengono disabilitati automaticamente per le operazioni eseguite dagli agenti di replica. Per impostazione predefinita, l'opzione NOT FOR REPLICATION viene specificata per i vincoli di chiave esterna e per i vincoli CHECK; questi vincoli vengono imposti per le operazioni dell'utente ma non per quelle dell'agente. Quando un agente di replica esegue un accodamento, aggiornamento o una eliminazione a un sottoscrittore, il vincolo non viene controllato; se invece un utente esegue un accodamento, un aggiornamento o una eliminazione, il vincolo viene controllato. Il vincolo viene disabilitato per l'agente di replica in quanto esso è già stato controllato nel server di pubblicazione quando i dati sono stati inseriti, aggiornati o eliminati.

Autorizzazioni

È necessario disporre dell'autorizzazione ALTER per la tabella.

Usare SQL Server Management Studio

Per disabilitare un vincolo di chiave esterna per la replica

  1. In Esplora oggettiespandere la tabella contenente il vincolo di chiave esterna che si desidera modificare, quindi espandere la cartella Chiavi .

  2. Fare clic con il pulsante destro del mouse sul vincolo di chiave esterna e scegliere Modifica.

  3. Nella finestra di dialogo Relazioni chiavi esterne scegliere No per Attiva per replica.

  4. Selezionare Chiudi.

Usare Transact-SQL

Per disabilitare un vincolo di chiave esterna per la replica

  1. Per eseguire questa attività in Transact-SQL, creare uno script per il vincolo della chiave esterna. In Esplora oggettiespandere la tabella contenente il vincolo di chiave esterna che si desidera modificare, quindi espandere la cartella Chiavi .

  2. Fare clic con il pulsante destro del mouse sul vincolo di chiave esterna, scegliere Crea script per chiave, quindi selezionare DROP e CREATE in e Nuova finestra editor di query. Lo script risultante dovrà essere simile all'esempio seguente del database di esempio 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. Nella parte ALTER TABLE ... ADD CONSTRAINT dello script modificare il nuovo vincolo di chiave esterna e specificare l'opzione NOT FOR REPLICATION. Ad esempio:

    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
    

Passaggi successivi