B_Table의 B_Column_1가 FK라고 가정했을 경우,
어느 두 테이블의 내용을 강제로 변경하려면 다음과 같은 에러 문구가 뜬다.
테이블 'A_Table'은(는) FOREIGN KEY 제약 조건에 의해 참조되므로 자를 수 없습니다.
* 아래의 코드로 A_Table에 걸린 FK(외래키)를 확인해보자.
EXEC sp_fkeys 'A_Table'
* 위 쿼리의 실행 결과에서 주요하게 봐야할 내용은 다음의 다섯 필드이다.
FK_NAME | (A_Table_FK01) | FK(외래키) 이름
FKTABLE_NAME | (B_Table) | FK(외래키)가 있는 테이블의 이름
FKCOLUMN_NAME | (B_Column_1) | FK(외래키)가 걸린 필드의 이름
PKTABLE_NAME | (A_Table) | 참조 대상의 PK(기본키)가 있는 테이블의 이름
PKCOLUMN_NAME | (A_Column_1) | 참조 대상의 컬럼의 이름
* 여기서 FK_NAME을 확인해 FK를 제거해주자.
ALTER TABLE B_Table drop A_Table_FK01
* 이후 원하는 쿼리를 진행한다
(DROP or TRUNCATE 등등의 쿼리...)
* 쿼리 결과를 확인한 후, 다시 FK를 복구해줘야 한다.
ALTER TABLE B_Table WITH CHECK ADD CONSTRAINT A_Table_FK01 FOREIGN KEY(B_Column_1) REFERENCES A_Table(A_Column_1)
* A_Table에 FK가 제대로 잡혔는지 다시 한번 확인해주자.
EXEC sp_fkeys 'A_Table'
* 추가로, DB의 모든 테이블에 걸려있는 FK를 확인하려면 다음과 같이 하면 된다. (네이밍 룰에 따라 아래의 like 절이 다를 수 있음.)
SELECT * FROM sysobjects WHERE xtype = 'F' and name like '%FK%'
댓글 없음:
댓글 쓰기