【问题标题】:SQL Server Trigger to DELETE one record from multiple tablesSQL Server 触发器从多个表中删除一条记录
【发布时间】:2011-08-09 16:55:00
【问题描述】:

我知道这可以用外键来完成,但我无法添加它们,或者在我插入新记录时会发生一些奇怪的事情。这个数据库中有很多存储过程,我不知道它们是做什么的,因为我对存储过程一无所知。我希望有人能帮我找出一个触发器,当我从 Product 表中删除它时,它会删除一个特定的 ProductID。它也位于名为 CompanyLink、TargetLink 和 CategoryLink 的表中。

截至目前,当我从 Product 表中删除 ProductID 时,我必须手动将其从插入的其他 3 个表中删除。

【问题讨论】:

    标签: triggers


    【解决方案1】:

    你可以通过这样的触发器来做到这一点:

    CREATE TRIGGER [dbo].[ProductDeleted]
    ON [dbo].[Product]
    AFTER DELETE
    AS
    BEGIN
    
       DELETE FROM CompanyLink WHERE ProductID = (SELECT TOP 1 ProductID FROM DELETED)
       DELETE FROM TargetLink WHERE ProductID = (SELECT TOP 1 ProductID FROM DELETED)
    
    END 
    

    显然语法可能并不完美,但这已接近您的需要。

    【讨论】:

    • 我会质疑 (SELECT top 1...) 的存在,因为 SQL 服务器触发器是语句级别的,如果 DELETE 语句从 Product 中删除多行,则只会从子表中删除第一行.
    • 这看起来并不像我想象的那么难。 Ken,除了 SELECT top 1,您还建议使用什么?
    • 所以我有这个: CREATE TRIGGER dbo.ProductDeleted ON dbo.Product 删除后从 CompanyLink 开始删除 WHERE ProductID = (SELECT ProductID FROM DELETED) DELETE FROM TargetLink WHERE ProductID = (SELECT ProductID FROM DELETED) DELETE FROM CategoryLink WHERE ProductID = (SELECT ProductID FROM DELETED) END
    猜你喜欢
    • 2020-09-30
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 2021-11-23
    • 2017-05-26
    相关资源
    最近更新 更多