SQL Server에서 FOREIGN KEY(외래 키)를 생성한 뒤에는 대량 데이터 입력, 마이그레이션 등의 작업을 위해 이를 일시적으로 비활성화해야 하는 경우가 종종 발생합니다. 이럴 때 ALTER TABLE 명령어를 사용하면 간단하게 해결할 수 있습니다.
SQL Server에서 외래 키를 비활성화하는 구문
ALTER TABLE ten_bang
NOCHECK CONSTRAINT fk_ten;
매개변수 설명
ten_bang
외래 키가 생성되어 있는 테이블의 이름입니다.
fk_ten
비활성화하고자 하는 외래 키(제약 조건)의 이름입니다.
예제
CREATE TABLE sanpham
( id_sanpham INT PRIMARY KEY,
ten_sanpham VARCHAR(50) NOT NULL,
phan_loai VARCHAR(25)
);
CREATE TABLE hangtonkho
( id_hangtonkho INT PRIMARY KEY,
id_sanpham INT NOT NULL,
soluong INT,
luong_toithieu INT,
luong_toida INT,
CONSTRAINT fk_htk_id_sanpham
FOREIGN KEY (id_sanpham)
REFERENCES sanpham(id_sanpham)
);
위 예제에서는 기본 키로 id_sanpham 필드를 포함하는 부모 테이블 sanpham(상품)을 먼저 생성했습니다. 그다음 자식 테이블인 hangtonkho(재고)에 삭제 제약 조건이 적용된 외래 키를 만들었습니다. CREATE TABLE 문은 hangtonkho 테이블에 fk_htk_id_sanpham이라는 이름의 외래 키를 생성하며, 이 외래 키는 hangtonkho 테이블의 id_sanpham 열과 sanpham 테이블의 id_sanpham 열 사이의 관계를 형성합니다.
함께 알아두면 좋은 내용
- SQL Server의 외래 키(Cascade Delete)
- SQL Server의 외래 키(Set Null)
생성된 외래 키를 비활성화하려면 아래 명령어를 실행합니다.
ALTER TABLE hangtonkho
NOCHECK CONSTRAINT fk_htk_id_sanpham;
위 예제는 ALTER TABLE 명령을 사용하여 hangtonkho 테이블에 생성된 외래 키 fk_htk_id_sanpham을 비활성화합니다. NOCHECK 옵션이 지정되면 해당 제약 조건이 삭제되지 않은 채로 유지되며, 검증만 중단됩니다.
참고: 비활성화한 외래 키를 다시 활성화하려면 NOCHECK 대신 CHECK 키워드를 사용하면 됩니다.
ALTER TABLE hangtonkho
WITH CHECK CHECK CONSTRAINT fk_htk_id_sanpham;