2012-06-05 4 views
0

과 충돌은 그래서 난 외래 키 : 외래 키 제약

appointment 
    {id, dept.id, datetime, sometable.id, sometableagain.id} 
task 
    {id, appointment.id, deptlead.id, taskname} 
deptlead 
    {id, name} 

그래서 내가 다른 테이블에서 다른 외래 키에 약속 테이블을 변경하기 위해 가지고 있던 FK와 서로 관련이 개 테이블을 가지고있다. 그래서 나는 task_appointment_fk, appointment_sometable_fk, appointment_sometableagain_fk 키를 삭제하여 테이블을 변경하여 새 필드를 추가하고 다시 모든 것을 추가했습니다. 마지막 두 개는 문제없이 추가되었습니다. 다른 하나 (task_appointment_fk가) 나에게이 메시지를주고 보관 상태 :
"ALTER TABLE statement conflicted with the Forien Key Constraint "dept_appointment". The Cconflict occurred in the database "MyDb" , table "appointment", column "id" 

그래서 내가 약속 테이블에 존재하지 않는 appointmentid 값이 작업에 일부 행이있을 수 있음을 명시 몇 가지 해결책을 발견 . 그래서 나는 같은 값을 가질 행을 삽입하려고했습니다. 여전히 나에게 똑같은 것을 준다. 문제는, 나는 그것을 쉽게하기 위해 작업에서 행을 지우고 싶지만 모든 fks를 다시 떨어 뜨리고 같은 일을 다른 테이블에 걸쳐해야하고, 나는 다른 테이블을 많이 가지고있다.

에는 몇 가지 조언이 필요합니다.

감사합니다.

답변

0

외부 키 테이블의 어떤 값이 기본 키 테이블에 일치하는 키 레코드가 없는지 확인하기 위해 쿼리를 작성할 수 있습니다. 값이 있으면 값을 삭제하십시오.

select * from  [task] a 
left join [appointment] b 
on  a.appointment_id = b.id 
+0

예. 나는 어딘가에 그것을 읽었습니다. 그 문제는, 내가 말했듯이, 그 fks에 연결된 여러 개의 fk가 있습니다. 내가 그렇게한다면, 그것들을 가져 와서 다시 매핑하는 것이 어려울 것입니다. – gdubs