我刚毕业。我也是刚开始工作。
@parentId 是我申明的一个变量,用于存储,主表中的Id。
大致的意思:
1.游标遍历主表中的每一行数据,同行,遍历一行,就存储一下,把主表的主键Id存储在@parentId中。
2.删除子表中外键Id=@parentId的数据
3.删除主表主键Id=@parentId的数据
我写的这个有一个BUG,要修改下,不然就把所有数据都删除掉了。
改成这样
declare cur_test Cursor
for (select id from zyy_user where 条件)
就是,你想删除,主表中的那条数据,所关联的子表数据(不知道是不是说的有点绕)
说到这里,其实该把上面这些代码都放在一个存储过程里面,这个存储过程有一个输入参数。
代码如下:
create proc proc_test
@Id --你想删除的主表数据的主键(Id)号
as
declare cur_test Cursor
for (select id from zyy_user where id=@Id)
open cur_test
declare @praentId int
fetch next from cur_test into @parentId
while(@@fetch_status=0)
begin
delete from zyy_manage_user where id=@parentId--这行的id一定是字表的外键
delete from zyy_user where id=@parentId
fetch next from cur_test into @parentId
end
close cur_test
deallocate cur_test
begin
end
hibernate,我个人也很不喜欢,性能真的很低。我的老师,以前说过这样一句话,改变了我对数据库的看法。
“不要什么事,都放在代码里做。数据库能做很多事,你不充分利用它,那你还用什么数据库?”