sql1="DELETE FROM a WHERE Class_Id="¶&";"
sql2="DELETE FROM b WHERE Class_Id="¶&";"
sqlStr=sql1 & sql2
objRs.Execute sqlstr
一对多表的删除
两张表a,b
a表的一条数据对应b表几条数据,请问,在删除a表这条数据的同时,也把与之对应的b表的多条数据删除,请问如何实现?
navana(我的病就是没有感觉) 于 2005-6-16 19:31:36
将两条SQL语句顺序放在一起即可
sql1="DELETE FROM a WHERE Class_Id="¶
sql2="DELETE FROM b WHERE Class_Id="¶
就像要删除某一类别的新闻一样。
MyGhosts(阿辉) 于 2005-6-16 22:50:19
像楼上说的就可以了,但别忘了加个事务;
kevin_gao(困了!累了!睡觉了!) 于 2005-6-17 1:49:16
sql1="DELETE FROM a WHERE Class_Id="¶&";"
sql2="DELETE FROM b WHERE Class_Id="¶&";"
sqlStr=sql1 & sql2
objRs.Execute sqlstr
我想是不是还要取决于具体的判定条件,如果不是明确给出a表的主码是不是应该这样作
sql1="delete from a where 字段1="¶&";"
sql2="delete from b where b.class_id in (select a.class_id from a where 字段1="¶&";)"
sqlstr=sql1 & sql2
其中a.class_id是b.class_id的外码
没必要,作外键的你删除顺序不对会报错的。只要你按顺序删就不会有问题。
而且你的语句也有问题啊,in 里面的条件在执行第一条语句后就没结果了啊。
请直接使用关系图
1,关系图
2,触发器:
CREATE TRIGGER TRIGGER_NAME ON a
FOR DELETE
AS
DELETE FROM b WHERE b.Class=a.id
3,存储过程事务
CREATE PROCEDURE Del
@a_idint-- a表中的id
as
begin transaction
delete from a where id = @a_id
delete from b where b_Class= @a_id
if @@error <> 0 rollback transaction
commit transaction
GO