写一触发器,A表和B表,以ID作为关联关系,A表中删除一条记录后,B表中与之相关的记录也删除 5

这样写不行吧createtriggertr_deleteonAfordeleteasdeletefromBwhereidin(selectidfromdeleted)go... 这样写不行吧

create trigger tr_delete on A for delete
as
delete from B
where id in(select id from deleted)
go

这样写会把整个表中的记录都会删除掉吧 ,我的 意思是要删除想删除的那一行
比如A中有学号字段为主键,B中学号为外键 。比如我要删除 A表中学号为200801的 这个人的 记录
在 删除A中这个学号的记录时B中的这天记录也应该删除了
就这样 这段代码我想改下就可以,但我不知怎么改
展开
 我来答
百度网友f19a583
2010-06-11 · TA获得超过1362个赞
知道小有建树答主
回答量:74
采纳率:0%
帮助的人:125万
展开全部
create trigger tr_delete on A for delete
as
delete from B
where id in(select id from deleted)
go

这样写就可以!
上面那个人写的语法有问题

你说的这个问题有问题:
B表引用A表主键,那么就无法先删除A表中的内容,除非B表中没有外键的引用,否则会出现外键约束错误!也就是说:要删除,必须要先删除B表中的内容,才可以删除A表中的内容。
所以你说的这个问题无法用触发器实现。因为不能直接先删除A表中的内容。
或者你在设计表的时候注明:
ON DELETE CASCADE:删除A表内容同时级联删除B表中对应的数据。

我想了这样一种方法:用存储过程,传入要删除的A表中的ID,然后删除A表和B表中的对应的数据。
create proc delAB @id int
as
delete from B where aid=@id
delete from A where id=@id
go

你如果要删除A表中ID为200801这一行,执行:
exec delAB 200801
dr_zxp
2010-06-10 · TA获得超过861个赞
知道小有建树答主
回答量:765
采纳率:100%
帮助的人:855万
展开全部
create trigger myt for delete
as
delete b
where id=(select id from inserted)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式