Sdílet prostřednictvím


Zakázání omezení cizího klíče pro replikaci

platí pro: SQL Server 2016 (13.x) a novější Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)databáze SQL v Microsoft Fabric

Omezení cizího klíče pro replikaci na SQL Serveru můžete zakázat pomocí aplikace SQL Server Management Studio nebo jazyka Transact-SQL. To může být užitečné, pokud publikujete data z předchozí verze SQL Serveru.

Poznámka

Pokud je tabulka publikována pomocí replikace, omezení cizího klíče jsou automaticky zakázána pro operace prováděné agenty replikace. Možnost NOT FOR REPLICATION je ve výchozím nastavení určena pro omezení cizího klíče a omezení kontroly; omezení se vynucují pro operace uživatelů, ale ne pro operace agenta. Když agent replikace provede vložení, aktualizaci nebo odstranění u odběratele, omezení se nekontroluje; pokud uživatel provede vložení, aktualizaci nebo odstranění, je omezení zaškrtnuté. Omezení je pro agenta replikace zakázané, protože omezení bylo již zkontrolováno v Publisheru, když byla data původně vložena, aktualizována nebo odstraněna.

oprávnění

Vyžaduje oprávnění ALTER na tabulce.

Použití aplikace SQL Server Management Studio

Zakázání omezení cizího klíče pro replikaci

  1. V Průzkumníku objektůrozbalte tabulku s omezením cizího klíče, které chcete upravit, a poté rozbalte složku Klíče.

  2. Klikněte pravým tlačítkem myši na omezení cizího klíče a pak vyberte Upravit.

  3. V dialogovém okně Relace cizích klíčů vyberte hodnotu Ne pro Vynucení pro replikaci.

  4. Vyberte Zavřít.

Použijte Transact-SQL

Zakázání omezení cizího klíče pro replikaci

  1. Chcete-li provést tuto úlohu v jazyce Transact-SQL, skriptujte omezení cizího klíče. V Průzkumníku objektůrozbalte tabulku s omezením cizího klíče, které chcete upravit, a poté rozbalte složku Klíče.

  2. Klikněte pravým tlačítkem myši na omezení cizího klíče, vyberte Klíč skriptu jako, pak vyberte DROP a CREATE To, pak vyberte Okno Editoru dotazů. Výsledný skript by měl vypadat podobně jako v následujícím příkladu z ukázkové databáze 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. V ALTER TABLE ... ADD CONSTRAINT části skriptu upravte nové omezení cizího klíče a zadejte možnost NOT FOR REPLICATION. Například:

    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
    

Další kroky