レプリケーションに対する外部キーの制約を無効にする
適用対象: SQL Server 2016 (13.x) 以降 Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
SQL Server Management Studio または Transact-SQL を使って、SQL Server でのレプリケーションで外部キー制約を無効にできます。 これは、SQL Server の以前のバージョンからのデータを公開する場合に便利です。
Note
レプリケーションを使用してテーブルをパブリッシュした場合、レプリケーション エージェントが実行する操作については外部キー制約が自動的に無効になります。 外部キー制約と CHECK 制約に対しては、NOT FOR REPLICATION オプションが既定で指定されます。この制約は、ユーザー操作に対しては適用されますが、エージェント操作には適用されません。 レプリケーション エージェントがサブスクライバー側で挿入、更新、または削除を実行した場合、制約のチェックは行われません。ユーザーが挿入、更新、または削除を実行した場合は、制約のチェックが行われます。 制約がレプリケーション エージェントに対して無効になるのは、データが最初に挿入、更新、または削除された際に、発行者側で既に制約がチェックされているためです。
アクセス許可
テーブルに対する ALTER 権限が必要です。
SQL Server Management Studio を使用します。
レプリケーションに対して外部キー制約を無効にするには
オブジェクト エクスプローラーで、変更する外部キー制約が含まれているテーブルを展開し、 [キー] フォルダーを展開します。
外部キー制約を右クリックし、[変更] を選択します。
[外部キーのリレーションシップ] ダイアログ ボックスで、 [レプリケーションに対して適用] の値として [いいえ]を選択します。
[閉じる] を選択します。
Transact-SQL の使用
レプリケーションに対して外部キー制約を無効にするには
Transact-SQL でこの作業を実行するには、外部キー制約をスクリプト化します。 オブジェクト エクスプローラーで、変更する外部キー制約が含まれているテーブルを展開し、 [キー] フォルダーを展開します。
外部キー制約を右クリックして [キーをスクリプト化] を選択し、[削除および作成] を選択して、[新しいクエリ エディター ウィンドウ] を選択します。 結果のスクリプトは、
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
スクリプトの
ALTER TABLE ... ADD CONSTRAINT
の部分で、新しい外部キー制約を変更し、NOT FOR REPLICATION オプションを指定します。 次に例を示します。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