2011-01-08 27 views
1

假设有一个Table1,其主键为“MainID”,并且该MainID在许多表中用作外键。检查所有外键的使用位置

现在,当我试图删除表1的纪录谁是MainID为外键在某些子表被使用,那么它会抛出这个异常“外键冲突ñ东西” ..

现在我想设计我的Delete Strored过程,首先检查所有具有该外键列“MainID”的子容器,并且如果Table1中的MainID在任何子表中使用,则它应该返回0。基于这个0值,我想要一个警告框来显示将会说“仍在使用或watever”,并且不会让用户删除该记录,除非子表中的所有记录已被删除,并且使用table1中的mainID。

我不能使用ON DELETE CASCADE。我希望用户逐个手动删除子表记录。只有在删除使用MainID的子表记录后,用户才能删除表1中的记录

回答

2

我会考虑使用TRY/CATCH(在c#或SQL Server中)来捕获正确的SQL错误编号。

钻入系统表并查找链接很简单,但是对于每个子表而言,这是一个动态查询。

+0

+1在ASP.NET C#中捕捉这绝对是最好的;使用Exception.Number来检查它是否是外键违例 – Andomar 2011-01-08 14:41:53