본문 바로가기

Programming/Database

MSSQL delete row from specific table that have foreign key constraint. FK 제약조건이 있는 테이블 row 지우기

반응형

 

간단히 특정 테이블(이하 Table A)의 row를 몇개 지우려고 하는데 Table A의 PK가 다른 테이블(이하 Table B)의 FK 일때 row 지우는것이 조금 귀찮아진다.

 

그냥 지우려고하면 아래와 같은 에러 발생.

The DELETE statement conflicted with the REFERENCE constraint "". The conflict occurred in database "", table "", column ''.

 

이럴경우 다음과 같은 순서로 작업을 진행한다.

 

1.해당 제약조건 임시 제거

2.Table A에서 지우려던 row 제거

3.Table B에서 Table A에선 지워진 row를 참조하고 있는 row가 있다면 제거

4.제약조건 복구

ALTER TABLE [dbo].[TableB] DROP CONSTRAINT [FK_AFromB]

DELETE FROM [dbo].[TableA]
WHERE ID > 10

DELETE FROM [dbo].[TableB]
WHERE TableAID NOT IN (SELECT ID FROM [dbo].[TableA])

ALTER TABLE [dbo].[TableB]  WITH CHECK ADD  CONSTRAINT [FK_AFromB] FOREIGN KEY([TableAID])
REFERENCES [dbo].[TableA] ([ID])
GO
ALTER TABLE [dbo].[TableB] CHECK CONSTRAINT [FK_AFromB]
GO
반응형