복제할 때 외래 키 제약 조건 사용 안 함

적용 대상: SQL Server 2016(13.x) 이상 Azure SQL 데이터베이스Azure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System(PDW)

SQL Server Management Studio 또는 Transact-SQL을 사용하여 SQL Server에서 복제에 대한 외래 키 제약 조건을 비활성화할 수 있습니다. 이 기능은 이전 SQL Server버전의 데이터를 게시하는 경우에 유용할 수 있습니다.

참고

테이블이 복제를 사용하여 게시된 경우 복제 에이전트에 의해 수행된 작업의 FOREIGN KEY 제약 조건은 자동으로 비활성화됩니다. FOREIGN KEY 제약 조건과 CHECK 제약 조건에 대해서는 NOT FOR REPLICATION 옵션이 기본적으로 지정됩니다. 이러한 제약 조건은 사용자 작업에는 적용되지만 에이전트 작업에는 적용되지 않습니다. 복제 에이전트가 구독자에서 삽입, 업데이트 또는 삭제를 수행하면 제약 조건이 확인되지 않지만 사용자가 삽입, 업데이트 또는 삭제를 수행하면 제약 조건이 확인됩니다. 데이터가 원래 삽입, 업데이트 또는 삭제될 때 제약 조건이 게시자에 이미 확인되었으므로 복제 에이전트에 대한 제약 조건이 비활성화됩니다.

권한

테이블에 대한 ALTER 사용 권한이 필요합니다.

SQL Server Management Studio 사용

복제할 때 FOREIGN KEY 제약 조건을 비활성화하려면

  1. 개체 탐색기에서 수정할 FOREIGN KEY 제약 조건을 포함하는 테이블을 확장한 다음 폴더를 확장합니다.

  2. 외래 키 제약 조건을 마우스 오른쪽 단추로 클릭한 다음, 수정을 선택합니다.

  3. 외래 키 관계 대화 상자에서 복제에 적용 값으로 아니요를 선택합니다.

  4. 닫기를 선택합니다.

Transact-SQL 사용

복제할 때 FOREIGN KEY 제약 조건을 비활성화하려면

  1. Transact-SQL에서 이 작업을 수행하려면 외래 키 제약 조건을 스크립팅합니다. 개체 탐색기에서 수정할 FOREIGN KEY 제약 조건을 포함하는 테이블을 확장한 다음 폴더를 확장합니다.

  2. 외래 키 제약 조건을 마우스 오른쪽 단추로 클릭하고, Script Key As를 선택하고, DROP and CREATE To를 선택한 다음, 새 쿼리 편집기 창을 선택합니다. 결과 스크립트는 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
    

다음 단계