Delete触发器删除子记录



那么,我有两个表。一个是sales_order (no_so VARCHAR PRIMARY KEY)另一个是status_so (no_so REFERENCES to sales_order)

如果我删除sales_order中的no_so,我希望status_so中的no_so被删除。因此,我创建了触发器来解决这个问题。

CREATE TRIGGER trg_sales_order
ON sales_order
FOR DELETE
AS
DELETE FROM status_so 
WHERE status_so.no_so IN (SELECT deleted.no_so FROM deleted)

之后,我运行下面的代码

DELETE FROM sales_order WHERE no_so = 'SO004'

我还是得到了一个错误,它说

DELETE语句与REFERENCE约束"fk_status_so_sales_order"冲突。冲突发生在数据库"db"表"dbo.status_so"列'no_so'.

From the docs:

OR | AFTER FOR或AFTER指定DML触发器仅在以下情况触发触发SQL语句中指定的所有操作都已启动成功。所有引用级联操作和约束检查还必须在此触发器触发之前成功。

您需要创建instead ofdelete触发器,并在那里以正确的顺序处理两个表中的删除操作。

相关内容

  • 没有找到相关文章

最新更新