存储过程获取表被引用的信息

时间:2022-11-26 13:39:57
可能题目取得不是很好,但我想看了文章就知道什么意思。
当你想删除一个表时,可能被其他表作为外键被引用,此时你想删除此表是删除不掉的。你必须把那引用此表为外键的表删掉,才能把你要删的表的删掉。可能文字不好表达。我就举个例子
当b,c表引用a表作为外键,你想删a表的某些数据,就一定要删除相关的b,c中引用a表的数据。可是b,c表可能又被其他表引用,这样肯定会导致一个递归。
如果按正常方法去删a表,你可能写删除语句来删除a表,但执行时会报错说那个表引用了此表,此时你根据报错信息会找到引用的表,又删除,又报错,又根据信息查找,此时我感觉很麻烦。
我就自己写了个存储过程。

按理来说要获取引用表的信息应该用递归来解决最好,但我试过,感觉在数据库中运用得没有c#好,才改变策略用过程来写。

代码如下

 

 

 

存储过程获取表被引用的信息存储过程获取表被引用的信息Code

 返回的结果有几个字段,其中Level表示表被引用的深度,就是b,c引用a,d引用b,f引用c,则b,c表的深度是1,d,f表的深度是2.此时删a表直接可以从d,f开始删,从深度高到低来删表。还一个字段是PK_NAME表示那些表引用了要删的表。其他字段应该很清楚。

不知道谁能用递归实现此功能