如何创建基于列值从 "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));
我有一个场景,每当 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));