Wyłączanie ograniczeń klucza obcego na potrzeby replikacji
Dotyczy: SQL Server 2016 (13.x) i nowsze
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL database w Microsoft Fabric
Ograniczenia klucza obcego dla replikacji w programie SQL Server można wyłączyć przy użyciu programu SQL Server Management Studio lub Języka Transact-SQL. Może to być przydatne, jeśli publikujesz dane z poprzedniej wersji programu SQL Server.
Notatka
Jeśli tabela jest publikowana przy użyciu replikacji, ograniczenia klucza obcego są automatycznie wyłączone dla operacji wykonywanych przez agentów replikacji. Opcja NOT FOR REPLICATION jest domyślnie określana dla ograniczeń klucza obcego i ograniczeń sprawdzających; ograniczenia są wymuszane dla operacji użytkownika, jednakże nie dla operacji agenta. Gdy agent replikacji wykonuje operację wstawiania, aktualizowania lub usuwania dla subskrybenta, ograniczenie nie jest zaznaczone; Jeśli użytkownik wykonuje operację wstawiania, aktualizowania lub usuwania, ograniczenie jest sprawdzane. Ograniczenie jest wyłączone dla agenta replikacji, ponieważ ograniczenie zostało już zaewidencjonowane w programie Publisher, gdy dane zostały pierwotnie wstawione, zaktualizowane lub usunięte.
uprawnienia
Aby korzystać z tabeli, wymagane jest uprawnienie ALTER.
Korzystanie z programu SQL Server Management Studio
Aby wyłączyć ograniczenie klucza obcego na potrzeby replikacji
W Eksploratorze Obiektów , rozwiń tabelę z ograniczeniem klucza obcego, który chcesz zmodyfikować, a następnie rozwiń folder Klucze.
Kliknij prawym przyciskiem myszy ograniczenie klucza obcego, a następnie wybierz pozycję Modyfikuj.
W oknie dialogowym Relacje klucza obcego wybierz wartość Nie dla Wymuszanie dla replikacji.
Wybierz , a następnie Zamknij.
Korzystanie z Transact-SQL
Aby wyłączyć ograniczenie klucza obcego na potrzeby replikacji
Aby wykonać to zadanie w języku Transact-SQL, wykonaj skrypt ograniczenia klucza obcego. W Eksploratorze obiektówrozwiń tabelę z ograniczeniem klucza obcego, który chcesz zmodyfikować, a następnie rozwiń folder Klucze.
Kliknij prawym przyciskiem myszy ograniczenie klucza obcego, wybierz pozycję Skryptuj klucz jako, a następnie wybierz pozycję DROP i CREATE To, a następnie wybierz pozycję Nowe okno edytora zapytań. Wynikowy skrypt powinien wyglądać podobnie do poniższego przykładu z przykładowej bazy danych
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
W części skryptu
ALTER TABLE ... ADD CONSTRAINT
zmodyfikuj nowe ograniczenie klucza obcego i wybierz opcję NIE DOTYCZĄCĄ REPLIKACJI. Na przykład: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