SQLite更新触发器问题

xe55xuns  于 2022-11-15  发布在  SQLite
关注(0)|答案(1)|浏览(141)

使用SQLite管理器,我正在尝试创建一个触发器,该触发器根据正在更改的另一个字段更新一个字段:

CREATE TRIGGER staff_update
AFTER UPDATE OF c_doctor ON tickets
WHEN OLD.c_doctor <> NEW.c_doctor
BEGIN
    UPDATE tickets
    SET c_doctor_staff_contact =  doctor_staff_contact.c_doctor_staff_contact 
    WHERE NEW.c_doctor = doctor_staff_contact.c_doctor;
END

c_doctortickets表和doctor_staff_contact表中的字段名称。doctor_staff_contact也是这些表中的一个字段的名称。
SET c_doctor_staff_contact = "test"; END可以工作,所以我的假设是= doctor_staff_contact.c_doctor_staff_contact WHERE NEW.c_doctor = doctor_staff_contact.c_doctor; END给我带来了问题。据我所知,我做的是对的。

= c_doctor_staff_contact IN (SELECT c_doctor_staff_contact FROM doctor_staff_contact
    WHERE NEW.c_doctor = doctor_staff_contact.c_doctor);
END

这会起作用,但会将c_doctor_staff_contact更改为0,并将所有其他票证c_doctor_staff_contact也更改为0。

vs91vp4v

vs91vp4v1#

触发器主体中的UPDATE查询应如下所示:

CREATE TRIGGER staff_update
AFTER UPDATE OF c_doctor ON tickets
WHEN OLD.c_doctor <> NEW.c_doctor
BEGIN
    UPDATE tickets
    SET c_doctor_staff_contact = (
        SELECT c_doctor_staff_contact 
        FROM doctor_staff_contact
        WHERE NEW.c_doctor = c_doctor
        )
    WHERE NEW.c_doctor = c_doctor;
END;

相关问题