使用触发器的替代解决方案

时间:2015-05-06 09:32:51

标签: sql-server triggers

我有一张桌子,在其他两张桌子上将他的PK作为FK。 我想删除此表中的记录,以根据已删除的行从其他表中删除记录。 我知道有一个使用触发器的解决方案,这是我的:

CREATE TRIGGER Trig_Supp
    ON T_SALARIE
    FOR DELETE
AS
    DELETE FROM T_EVOLUTION
    WHERE Matricule = SELECT Matricule FROM deleted

    DELETE FROM T_EVALUATION
    WHERE Matricule = SELECT Matricule FROM deleted

GO

但是我们的老师告诉我们要搜索另一个可以像触发器那样做的解决方案,但我在网上找不到任何东西。

那么还有另一种解决办法吗?

2 个答案:

答案 0 :(得分:2)

因此,您正在寻找的是能够自动处理级联删除的任何内容,无论使用何种查询来删除它。

正如其他人已经评论过的那样,正确的选择是使用删除级联外键,因为无论如何显然存在隐含的外键连接。也像Damien_The_Unbeliever所说的那样,没有这样的约束,你就永远不会在没有先删除引用子行的情况下删除父行。

答案 1 :(得分:1)

您可以使用Foo::Foo() try : _pimpl(new FooImpl) { } catch(...) { delete _pimpl.release(); } Foo::~Foo() { delete _pimpl.release(); } 子句捕获已删除的行,然后从辅助表中进行匹配和删除。请参阅BOL here

这样做的好处是它可以处理多行。