写一触发器,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中的这天记录也应该删除了
就这样 这段代码我想改下就可以,但我不知怎么改 展开
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中的这天记录也应该删除了
就这样 这段代码我想改下就可以,但我不知怎么改 展开
2个回答
展开全部
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
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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询