【问题标题】:Loop in trigger SQL Server循环触发 SQL Server
【发布时间】:2009-09-06 11:39:47
【问题描述】:

我有下面的触发器

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)

结束

当我删除一个用户时它工作正常,但如果我删除多个用户,子查询在已删除表中返回多个用户并且触发器失败。

当我一次删除多个用户时,如何调整它以使其正常工作?

我考虑过如下改变它。方法对吗?

修改

--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)

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

【问题讨论】:

    标签: sql sql-server triggers


    【解决方案1】:

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

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

    请注意:SQL 旨在处理多行...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-30
      • 1970-01-01
      • 2011-05-13
      • 2020-03-01
      • 2010-10-21
      • 2010-12-11
      相关资源
      最近更新 更多