レプリケーションに対する外部キーの制約を無効にする

適用対象: 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 を使用します。

レプリケーションに対して外部キー制約を無効にするには

  1. オブジェクト エクスプローラーで、変更する外部キー制約が含まれているテーブルを展開し、 [キー] フォルダーを展開します。

  2. 外部キー制約を右クリックし、[変更] を選択します。

  3. [外部キーのリレーションシップ] ダイアログ ボックスで、 [レプリケーションに対して適用] の値として [いいえ]を選択します。

  4. [閉じる] を選択します。

Transact-SQL の使用

レプリケーションに対して外部キー制約を無効にするには

  1. Transact-SQL でこの作業を実行するには、外部キー制約をスクリプト化します。 オブジェクト エクスプローラーで、変更する外部キー制約が含まれているテーブルを展開し、 [キー] フォルダーを展開します。

  2. 外部キー制約を右クリックして [キーをスクリプト化] を選択し、[削除および作成] を選択して、[新しいクエリ エディター ウィンドウ] を選択します。 結果のスクリプトは、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. スクリプトの 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
    

次のステップ