Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用触发器的替代解决方案_Sql Server_Triggers - Fatal编程技术网

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

Sql server 使用触发器的替代解决方案,sql-server,triggers,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_EVALUATIO

我有一张桌子,在另外两张桌子上有他的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
但是我们的老师告诉我们要寻找另一个解决方案,这个解决方案可以和这个触发器做的一样,但是我在互联网上找不到任何东西


那么真的有其他解决方案吗?

您可以使用
OUTPUT
子句捕获已删除的行,然后从辅助表中进行匹配和删除。见波尔


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

您可以使用
OUTPUT
子句捕获已删除的行,然后从辅助表中进行匹配和删除。见波尔


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

您可以使用
OUTPUT
子句捕获已删除的行,然后从辅助表中进行匹配和删除。见波尔


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

您可以使用
OUTPUT
子句捕获已删除的行,然后从辅助表中进行匹配和删除。见波尔


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

因此,您要寻找的是能够自动处理级联删除的任何内容,而不管使用何种查询来删除它


正如其他人已经评论的那样,正确的选择是使用delete-cascade外键,因为显然这里有一个隐含的外键连接。同样像Damien_,不信者所说的,如果没有这样的约束,如果不先删除引用的子行,就永远无法删除父行。

因此,您要寻找的是能够自动处理级联删除的任何东西,无论使用何种查询来删除它


正如其他人已经评论的那样,正确的选择是使用delete-cascade外键,因为显然这里有一个隐含的外键连接。同样像Damien_,不信者所说的,如果没有这样的约束,如果不先删除引用的子行,就永远无法删除父行。

因此,您要寻找的是能够自动处理级联删除的任何东西,无论使用何种查询来删除它


正如其他人已经评论的那样,正确的选择是使用delete-cascade外键,因为显然这里有一个隐含的外键连接。同样像Damien_,不信者所说的,如果没有这样的约束,如果不先删除引用的子行,就永远无法删除父行。

因此,您要寻找的是能够自动处理级联删除的任何东西,无论使用何种查询来删除它


正如其他人已经评论的那样,正确的选择是使用delete-cascade外键,因为显然这里有一个隐含的外键连接。同样,正如Damien_的不信教者所说,如果没有这样的约束,如果不先删除引用的子行,就永远无法删除父行。

您是否阅读过有关级联删除的内容,并且您的触发器并不完全正确,因为sql server不是针对每一行而是针对每一条语句触发它们。如果有人删除了超过1行且其中一条语句与前面的注释一致,则触发器将失败,但是:更不用说,如果FKs已实际设置,则此触发器将不起作用,因为约束检查将在此触发器之前很久发生(并阻止第一次删除)您是否阅读过有关级联删除的内容,并且您的触发器不太正确,因为sql server不是针对每一行而是针对每一条语句触发它们。如果有人删除了超过1行且其中一条语句与前面的注释一致,则触发器将失败,但是:更不用说,如果FKs已实际设置,则此触发器将不起作用,因为约束检查将在此触发器之前很久发生(并阻止第一次删除)您是否阅读过有关级联删除的内容,并且您的触发器不太正确,因为sql server不是针对每一行而是针对每一条语句触发它们。如果有人删除了超过1行且其中一条语句与前面的注释一致,则触发器将失败,但是:更不用说,如果FKs已实际设置,则此触发器将不起作用,因为约束检查将在此触发器之前很久发生(并阻止第一次删除)您是否阅读过有关级联删除的内容,并且您的触发器不太正确,因为sql server不是针对每一行而是针对每一条语句触发它们。如果有人删除了超过1行且其中一条语句与前面的注释一致,则触发器将失败,但是:更不用说,如果FKs已实际设置,则此触发器将不起作用,因为约束检查将在此触发器之前很久发生(并阻止第一次删除)被解雇了。特工说他需要一个模拟触发器的解决方案。在这一点上,更改删除数据的每个查询可能不是一个选项,但您必须以一种在任何查询删除数据时自动处理所有这些的方式配置DB对象。OP表示,他需要一种模拟触发器的解决方案。在这一点上,更改删除数据的每个查询可能不是一个选项,但您必须以一种在任何查询删除数据时自动处理所有这些的方式配置DB对象。OP表示,他需要一种模拟触发器的解决方案。在这一点上,更改删除数据的每个查询可能不是一个选项,但是您必须以一种在任何查询被删除时自动处理所有这些的方式配置DB对象