Disabilitare i vincoli di chiave esterna per la replica
Si applica a: SQL Server 2016 (13.x) e versioni successive Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma 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
In Esplora oggettiespandere la tabella contenente il vincolo di chiave esterna che si desidera modificare, quindi espandere la cartella Chiavi .
Fare clic con il pulsante destro del mouse sul vincolo di chiave esterna e scegliere Modifica.
Nella finestra di dialogo Relazioni chiavi esterne scegliere No per Attiva per replica.
Selezionare Chiudi.
Usare Transact-SQL
Per disabilitare un vincolo di chiave esterna per la replica
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 .
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
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