【问题标题】:SQL Query - Creating an INSTEAD OF DELETE that checks existence of value in 2nd tableSQL 查询 - 创建一个 INSTEAD OF DELETE 来检查第二个表中是否存在值
【发布时间】:2011-12-09 20:32:28
【问题描述】:

我正在尝试创建一个将打印消息的删除触发器。触发器应检查order 值是否存在于order_details 表中。如果该值存在于第二个表中,我想返回该值。我已经修修补补了几天,但我无法让它工作。

我是 SQL Server 和查询创建的新手。
这是我总结的:

CREATE TRIGGER tr_delete_check
ON  orders
INSTEAD OF DELETE
AS
IF (SELECT order_id
    FROM   orders
    WHERE  order_details.order_id=orders.order_id
    )
    BEGIN
        PRINT 'No Delete: Value exists in Order Details table'
        ROLLBACK TRANSACTION
    END
GO

【问题讨论】:

  • 这种事情是用外键完成的,不是触发器。

标签: sql sql-server triggers sql-delete


【解决方案1】:

您可能想要使用外键:

ALTER TABLE order_details
ADD CONSTRAINT order_details_order_id_fkey FOREIGN KEY (order_id)
REFERENCES order (order_id);

您可以通过添加以下内容将删除级联到 order_details 中的依赖行:

ON DELETE CASCADE

但默认是:

ON DELETE NO ACTION

这会执行您的触发器尝试执行的操作:如果存在 order_details 中的相关行,则回滚删除。阅读details in the manual。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多