sqlserver数据库中,
有一个表T两个字段id和pid,其中pid以id为外键,
1 -1
3 1
4 -1
7 3
10 7
11 1
12 -1
现在的目标是:删除id为1的记录,以及它的子记录(包括子记录的子记录)。
比如删除id为1的记录,就需要删除它的子记录3、11,删除3的子记录7,删除7的子记录10
那么这个循环的where条件怎么写呢?
不要用存储过程吧?
想提高效率就用存储过程
public void delete(int id)
{
if(判断是否有子记录如果没有)
{
直接删除
}
else
{
for(把子记录中的值循环取出来)
{
调用delete(id);
}
}
}
你试下吧,我没有测试。
可以写个sql语句,根据 id,得到它的无限级子记录的List,然后批量删除
select * from t connect by prior id = pid start with id = 1 order by id