高手!如何一条SQL语句删除多张表中记录

2024-12-02 15:54:47
推荐回答(5个)
回答1:

最好不要使用这种方式,包括级联删除,触发器但不限于数据库的自动处理功能,这样的后果就是数据在后台自动被改动,在我看来,数据的不可控情况是极度糟糕的问题,而且这样的情况是程序代码编写混乱造成的严重后果,我认为,数据库就只是拿来存放数据的,所有的逻辑都应该跟数据库无关,数据库的理想状态应该是所有数据都是独立的,所有的逻辑都应该是外部情况。

回答2:

思路错了吧!明明是两句sql执行的语句!
如果你想在第二句出错的情况下,第一句也不执行的话可以设置autocommit 设置为false
然后用rollback.

回答3:

建议你写个存储过程,我写的一个,让你参考一下!CardNo是自定义的数据类型!用触发器容易出错
CREATE PROCEDURE DelFixUser
@CardNo CardNo
AS
Declare @CarNo CarNo
select @CarNo=车辆号码 from FixCardIndexTable
where 卡号=@CardNo
Delete from AllCardIndexTable
where 卡号=@CardNo
Delete from FixCardIndexTable
where 卡号=@CardNo
Delete from FixCardEndDateTable
where 卡号=@CardNo
Delete from CardPassWordTable
where 卡号=@CardNo
Delete from UserCarInfoTable
where 车辆牌号=@CarNo
说明:删除一个固定用户记录,同时从AllCardIndexTable、FixCardIndexTable、FixCardEndDateTable、CardPassWordTable和UserCarInfoTable表中删除相应的记录。

回答4:

不用触发器也可以 在关系图里面设置联级删除

回答5:

delete t3 where t3.B列 in
(
select B列
from t2
inner join t1 on t2.A列=t1.A列
);
delete t2
where t2.A列 in
(
select A列
from t1
)

说明两个sql语句中间加个分号,可一次执行。你可点击sql server 菜单下方的“新建查询”,在弹出的新窗口中运行上述语句。一个普通的sql语句删除两个表做不到。这与sql server 的内在机制有关。