2011-01-08 2 views
1

기본 키가 "MainID"인 Table1 테이블이 있으며이 MainID가 많은 테이블에서 외래 키로 사용되고 있다고 가정 해 보겠습니다. 나는 시도하고 외래 키는 어떤 자식 테이블에 사용되는로 MainID을의 표에서 레코드를 삭제할 때모든 외래 키 사용 위치 확인

지금, 그것은 내가 원하는 이제 "외래 키 충돌 n 개의 물건"이이 예외 ..

를 던졌습니다 내 Delete Strored 프로 시저를 디자인하면 먼저 외부 키 열 "MainID"가있는 모든 자식을 검사하고 Table1의 MainID가 자식 테이블 중 하나에서 사용되고 있으면 0을 반환해야합니다. 이 0 값을 바탕으로 경고 상자에 "Still in use or watever"라고 표시되고 사용자 테이블에서 table1의 mainID를 사용하는 모든 레코드가 삭제되지 않은 한 사용자가 삭제하지 못하게하려고합니다.

ON DELETE CASCADE을 사용할 수 없습니다. 나는 사용자가 하나씩 수동으로 자식 테이블 레코드를 삭제하길 원한다. 사용자가 Table1에서 레코드를 삭제할 수있는 MainID를 사용하는 자식 테이블 레코드가 삭제 된 후에 만 ​​

답변

2

TRY/CATCH (C# 또는 SQL Server)를 사용하여 올바른 SQL 오류 번호를 트랩하는 것이 좋습니다.

시스템 테이블을 드릴하고 링크를 찾는 것은 간단하지만 각 하위 테이블에 대한 동적 쿼리가 여러 개 있습니다.

+0

+1 ASP.NET C#에서 이것을 잡는 것이 가장 좋습니다. Exception.Number를 사용하여 외래 키 위반인지 확인하십시오. – Andomar