我有以下触发器
ALTER TRIGGER [dbo].[DeleteUserData]
ON [dbo].[site_users]
AFTER DELETE
AS
BEGIN
SET NOCOUNT ON;
--delete user uploads
update my_gallery set deleted=1 where un=(select un from deleted) and subdomain=(select subdomain from deleted)
--delete user pms
delete from pms where toUn=(select un from deleted) and subdomain=(select subdomain from deleted)
--delete friends
delete from friend_blocked_list where un=(select un from deleted) and subdomain=(select subdomain from deleted)
END
当我删除一个用户时它工作正常但是如果我删除了多个用户子查询,则在删除的表中返回多个用户并且触发器失败。
如何调整它以便在我一次删除多个用户时它可以正常工作?
我考虑过将其改为如下。这是正确的方法吗?
改变的
--delete user uploads
update my_gallery set deleted=1 where un in (select un from deleted) and subdomain in (select subdomain from deleted)
--delete user pms
delete from pms where toUn in (select un from deleted) and subdomain in (select subdomain from deleted)
--delete friends
delete from friend_blocked_list where un in (select un from deleted) and subdomain in (select subdomain from deleted)
有些人可能会问为什么不在表中添加外键,而在子域中添加唯一的用户名
答案 0 :(得分:0)
是的,这是一种方式。它不会处理子查询中的NULL值,但我认为这无关紧要。
你也可以使用EXISTS (handles NULLs) and JOIN(关于EXISTS / IN / JOIN的SO问题)
请注意:SQL无论如何都要处理多行......