2012-11-16 2 views
1

삭제 옵션에서 다른 외래 키를 테스트하고 있습니다. 나는 피곤한 캐스케이드, 아무런 행동도하지 않고, null을 설정했다. SQL Server에서 단지 오류를보고합니다 :SQL Server 2008 외래 키 삭제시 기본값이 작동하지 않습니다.

메시지 레벨 547, 수준 16, 상태 0, 줄 1 DELETE 문이 FOREIGN KEY 제약 조건 "FK_child_parent"과 충돌했습니다. 데이터베이스 "Test", 테이블 "dbo.Test_parent", 열 'no'에서 충돌이 발생했습니다. 명세서가 종료되었습니다.

create table Test_parent(
    [no] int primary key  
) 

CREATE TABLE test_child(
    SUB1 INT, 
    [NO] int DEFAULT 0 CONSTRAINT FK_child_parent REFERENCES Test_parent([no]) ON DELETE set default 
) 

insert into Test_parent values(1),(2) 

insert into test_child values(1, 1) 
insert into test_child values(2, 1) 

delete from Test_parent 

답변

1

자식에서 설정된 기본값을 트리거하는 상위 테이블을 삭제합니다. DB는 하위 레코드를 기본값 인 0으로 설정하려고 시도합니다. 그러나 부모 테이블에 0 레코드가 없으므로 외래 키 위반이 트리거됩니다.

+0

그렇다면 기본값 설정은 무엇입니까? 나는 그것이 null로 설정되지만 컬럼을 디폴트 값으로 설정할 것이라고 생각했다. set default가 의미가있는 예제를 만들 수 있습니까? – thotwielder

+1

부모 테이블에 '0'레코드가 있으면 적절한 기본값이됩니다. 예 : 재고 시스템을 고려하십시오. 범주를 삭제하면 해당 범주의 제품이 사라지지 않고 여전히 존재할 수 있습니다. 따라서 영구 "기본"카테고리를 설정합니다. id = 0이므로 "나쁜 크리스마스 선물"카테고리를 삭제하면 할머니의 추악한 스웨터가 대신 "기본"카테고리로 이동합니다. –

+0

우수! 감사. – thotwielder

관련 문제