Zakázání omezení cizího klíče pro replikaci
platí pro: SQL Server 2016 (13.x) a novější
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics 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
V Průzkumníku objektůrozbalte tabulku s omezením cizího klíče, které chcete upravit, a poté rozbalte složku Klíče.
Klikněte pravým tlačítkem myši na omezení cizího klíče a pak vyberte Upravit.
V dialogovém okně Relace cizích klíčů vyberte hodnotu Ne pro Vynucení pro replikaci.
Vyberte Zavřít.
Použijte Transact-SQL
Zakázání omezení cizího klíče pro replikaci
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.
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
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