如何创建基于列值从 "S" 更改为 "D" 的触发器

How to create a trigger based on a column value change from "S" to "D"

我有一个场景,每当 table purch_ord_hdr 上的列 src_system_id 从“S”更改为“D”时,我需要一个触发器来报告。

每当值发生变化时,该操作必须由 insert or/and update 触发。无论是 insert 还是 update 语句。

对于 SQL 服务器,试试这个(修改为包括您的 table 名称和主键列名称)

create trigger on [Table name here]
for insert, update 
as
Set NoCount On
    if Exists
      ( Select * From inserted I 
           left join deleted d 
               on d.PKCol = i.PKCol  -- < replace PKCol w/name of Prim Key
        Where i.src_system_id = 'D' 
            and isnull(d.src_system_id, 'S') = 'S')
     Begin
         -- Here put code to do whatever you want trigger to do
     End

您应该说出您使用的是哪个版本的 IDS 运行。

尽管如此,请检查此测试用例并进行调整。

CREATE TABLE tab1(
    col1            CHAR(1) 
);

CREATE TABLE tab1_hist(
        col1_old        CHAR(1),
        col1_new        CHAR(1),
        user            VARCHAR(32),
        event           CHAR(1),
        date            DATETIME YEAR TO SECOND
);


CREATE PROCEDURE sp_ti_tab1(val CHAR(1))
        INSERT INTO tab1_hist (col1_new, user, event, date)
                VALUES (val, USER, 'I', CURRENT);
END PROCEDURE;

CREATE PROCEDURE sp_tu_tab1(val_o CHAR(1), val_n CHAR(1))
        INSERT INTO tab1_hist (col1_old, col1_new, user, event, date)
                VALUES (val_o, val_n, USER, 'U', CURRENT);
END PROCEDURE;

CREATE TRIGGER ti_tab1
        INSERT OF col1 ON tab1
        REFERENCING NEW AS new
        FOR EACH ROW WHEN(new.col1 = 'D')
                (EXECUTE PROCEDURE sp_ti_tab1(new.col1));

CREATE TRIGGER tu_tab1
        UPDATE OF col1 ON tab1
        REFERENCING NEW AS new OLD AS old
        FOR EACH ROW WHEN(new.col1 = 'D' AND old.col1 = 'A')
                (EXECUTE PROCEDURE sp_tu_tab1(old.col1, new.col1));