2009-09-06 33 views
0

我有以下触发循环中触发的SQL Server

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

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

您还可以使用EXISTS (handles NULLs) and JOIN(以SO问题上存在/ IN/JOIN)

请注意:SQL设计反正来处理多行...