那么,我有两个表。一个是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 of
delete触发器,并在那里以正确的顺序处理两个表中的删除操作。