3729: Cannot DROP because it is being referenced by object (객체가 참조 중이어서 DROP 불가)
SQL Server의미
삭제하려는 객체(테이블, 타입, 함수 등)를 다른 객체가 참조하고 있어 그 의존성 때문에 삭제할 수 없다. 특히 스키마 바인딩된 객체가 이렇게 보호된다.
원인
WITH SCHEMABINDING으로 생성된 뷰나 함수가 의존하는 테이블/객체를 삭제하려 하거나, 외래 키가 참조하는 테이블을 삭제하거나, 테이블/파라미터가 아직 사용 중인 사용자 정의 타입을 제거하려는 경우다.
해결 방법
참조하는 객체를 먼저 삭제하거나 의존성을 제거한다. 의존성 확인: SELECT referencing_schema_name, referencing_entity_name FROM sys.dm_sql_referencing_entities('app_schema.object', 'OBJECT'); 스키마 바인딩된 뷰는 먼저 ALTER VIEW로 SCHEMABINDING을 제거하거나 뷰를 삭제한 후 테이블을 삭제한다.
같은 데이터베이스의 다른 항목
- 50000Custom error raised with RAISERROR (RAISERROR로 발생시킨 사용자 정의 오류)
- 3902The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION (대응하는 BEGIN TRANSACTION이 없는 COMMIT TRANSACTION)
- 1101Could not allocate a new page because of insufficient disk space in filegroup (파일 그룹의 디스크 공간 부족으로 새 페이지를 할당할 수 없음)
- 3961Snapshot isolation transaction failed because the object was modified by a DDL statement (객체가 DDL로 변경되어 스냅샷 격리 트랜잭션 실패)
- 1785Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths (FOREIGN KEY 제약 조건이 순환 또는 다중 cascade 경로를 만들 수 있음)
- 9421XML parsing: illegal xml character
- 15151Cannot find the object/principal because it does not exist or you do not have permission (객체/보안 주체가 존재하지 않거나 권한이 없어 찾을 수 없음)