INSERT 및 UPDATE 문에서 외래 키 제약 조건 사용 안 함

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

SQL Server에서 또는 SQL Server Management Studio나 Transact-SQL을 사용하여 INSERT 및 UPDATE 트랜잭션 중 외래 키 제약 조건을 해제할 수 있습니다. 새 데이터가 기존 제약 조건을 위반하지 않을 것을 알고 있는 경우 또는 제약 조건이 데이터베이스에 이미 있는 데이터에만 적용될 경우 이 옵션을 사용합니다.

제한 사항

이러한 제약 조건을 해제한 후에는 해당 열에 대한 이후 삽입 또는 업데이트 작업의 유효성을 해당 제약 조건에 따라 검사하지 않습니다.

권한

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

SQL Server Management Studio 사용

INSERT 및 UPDATE 문의 외래 키 제약 조건 사용 중지하기

  1. 개체 탐색기에서 제약 조건이 있는 테이블을 확장하고 Keys 폴더를 확장합니다.

  2. 제약 조건을 마우스 오른쪽 단추로 클릭하고 수정을 선택합니다.

  3. 테이블 디자이너 아래 표에서 외래 키 제약 조건 적용을 선택하고 드롭다운 메뉴에서 아니요를 선택합니다.

  4. 닫기를 선택합니다.

  5. 원하는 경우 제약 조건을 다시 사용하도록 설정하려면 위 단계를 되돌려야 합니다. 외래 키 제약 조건 적용을 선택하고 드롭다운 메뉴에서 를 선택합니다.

  6. 외래 키의 관계에 있는 기존 데이터를 확인하여 제약 조건을 신뢰하려면 만들기 또는 다시 사용 시 기존 데이터 검사를 선택하고 드롭다운 메뉴에서 를 선택합니다. 이렇게 하면 외래 키 제약 조건을 신뢰할 수 있습니다.

  • 만들기 또는 다시 사용 시 기존 데이터 검사아니요로 설정된 경우 외래 키는 다시 사용하도록 설정할 때 기존 데이터를 검사하지 않습니다. 따라서 쿼리 최적화 프로그램은 잠재적인 성능 향상을 고려할 수 없습니다. 신뢰할 수 있는 외래 키는 외래 키 제약 조건에 따라 가정으로 실행 계획을 간소화하는 데 사용할 수 있으므로 권장됩니다. 외래 키를 데이터베이스에서 신뢰할 수 있는지 확인하려면 이 문서의 뒷부분에 있는 샘플 쿼리를 참조하세요.

Transact-SQL 사용

INSERT 및 UPDATE 문의 외래 키 제약 조건 사용 중지하기

  1. 개체 탐색기에서 데이터베이스 엔진인스턴스에 연결합니다.

  2. 표준 도구 모음에서 새 쿼리를 선택합니다.

  3. 다음 예제를 복사하여 쿼리 창에 붙여넣고 실행을 선택합니다.

    USE AdventureWorks2022;  
    GO  
    ALTER TABLE Purchasing.PurchaseOrderHeader  
    NOCHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID;  
    GO  
    
  4. 원하는 경우 제약 조건을 다시 사용하도록 설정하려면 다음 예제를 복사하여 쿼리 창에 붙여넣고 실행을 선택합니다.

    USE AdventureWorks2022;  
    GO  
    ALTER TABLE Purchasing.PurchaseOrderHeader  
    CHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID;  
    GO  
    
  5. 사용자 환경의 제약 조건이 신뢰할 수 있고 사용하도록 설정되어 있는지 확인합니다. is_not_trusted = 1이면 외래 키가 다시 사용되거나 다시 만들어질 때 기존 데이터를 검사하지 않습니다. 따라서 쿼리 최적화 프로그램은 잠재적인 성능 향상을 고려할 수 없습니다. 신뢰할 수 있는 외래 키는 외래 키 제약 조건에 따라 가정으로 실행 계획을 간소화하는 데 사용할 수 있으므로 권장됩니다. 다음 예제를 복사하여 쿼리 창에 붙여넣고 실행을 선택합니다.

    SELECT o.name, fk.name, fk.is_not_trusted, fk.is_disabled
    FROM sys.foreign_keys AS fk
    INNER JOIN sys.objects AS o ON fk.parent_object_id = o.object_id
    WHERE fk.name = 'FK_PurchaseOrderHeader_Employee_EmployeeID';
    GO
    

    테이블의 기존 데이터가 외래 키 제약 조건을 준수하는 경우 외래 키 제약 조건을 신뢰할 수 있는 것으로 설정해야 합니다. 외래 키를 신뢰할 수 있는 키로 설정하려면 다음 스크립트를 사용하여 외래 키 제약 조건을 다시 신뢰하고 추가 WITH CHECK 구문을 확인합니다. 다음 예제를 복사하여 쿼리 창에 붙여넣고 실행을 선택합니다.

    ALTER TABLE [Purchasing].[PurchaseOrderHeader] 
    WITH CHECK 
    CHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID;
    GO
    

다음 단계