循环触发SQL Server

时间:2009-09-06 11:39:47

标签: sql sql-server triggers

我有以下触发器

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)

有些人可能会问为什么不在表中添加外键,而在子域中添加唯一的用户名

1 个答案:

答案 0 :(得分:0)

是的,这是一种方式。它不会处理子查询中的NULL值,但我认为这无关紧要。

你也可以使用EXISTS (handles NULLs) and JOIN(关于EXISTS / IN / JOIN的SO问题)

请注意:SQL无论如何都要处理多行......