sql – 当更新另一个表中的列时,创建一个更新一个表上的列的触发器

前端之家收集整理的这篇文章主要介绍了sql – 当更新另一个表中的列时,创建一个更新一个表上的列的触发器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有两张桌子

订单(id,date,note)

交货(Id,Note,Date)

当订单更新日期时,我想创建一个更新交货日期的触发器.

我在想这样做

CREATE OR REPLACE TRIGGER your_trigger_name
BEFORE UPDATE
ON Order
DECLARE
BEGIN
   UPDATE Delivery set date = ??? where id = ???
END;

如何获取日期和行ID?

谢谢

解决方法

How do i get the date and row id?

假设这些是您的ORDER表上称为DELIVERY_DATE和ID的列,您的触发器应该如下所示:

CREATE OR REPLACE TRIGGER your_trigger_name
    BEFORE UPDATE ON Order
    FOR EACH ROW 
BEGIN
   if :new.delivery_date != :old.delivery_date
   then
       UPDATE Delivery d
       set d.delivery_date = :new.delivery_date
       where d.order_id = :new.id;
    end if;
END;

注意FOR EACH ROW子句:必须引用单独行的值.我使用了一个IF结构来测试是否在交货时执行UPDATE.如果您的触发器中没有其他逻辑,您可以这样写:

CREATE OR REPLACE TRIGGER your_trigger_name
    BEFORE UPDATE OF delivery_date ON Order
    FOR EACH ROW 
BEGIN
   UPDATE Delivery d
   set d.delivery_date = :new.delivery_date
   where d.order_id = :new.id;
END;

我已经回答了你问过的问题,但是,我将指出,你的数据模型是次优的.正确的规范化设计只能在一个表上保持DELIVERY_DATE:DELIVERY似乎是合适的位置.

原文链接:https://www.f2er.com/mssql/75832.html

猜你在找的MsSQL相关文章