我试图创建一个触发器来完成以下
检查请求更新的行中的ACTION_TYPE字段的值
如果行(在更新之前)的ACTION_TYPE为空,我想插入值/字符串"更改"。
如果行(在更新之前)的ACTION_TYPE包含字符串' Add',我想保持该值不变。
如果行(在更新之前)的ACTION_TYPE包含字符串' Change',我想保持该值不变。
CREATE TRIGGER tbl8_change
ON HOLIDAY_DATE_TABLE
BEFORE UPDATE
AS
BEGIN
IF ((SELECT ACTION_TYPE FROM HOLIDAY_DATE_TABLE
WHERE
inserted.HID = HOLIDAY_DATE_TABLE.HID) == NULL) THEN
INSERT INTO HOLIDAY_DATE_TABLE (ACTION_TYPE)
VALUES ('Changed')
WHERE inserted.HID = HOLIDAY_DATE_TABLE.HID;
IF ((SELECT ACTION_TYPE FROM HOLIDAY_DATE_TABLE
WHERE
inserted.HID = HOLIDAY_DATE_TABLE.HID) == 'Changed') THEN
INSERT INTO HOLIDAY_DATE_TABLE (ACTION_TYPE)
VALUES ('Changed')
WHERE inserted.HID = HOLIDAY_DATE_TABLE.HID;
IF ((SELECT ACTION_TYPE FROM HOLIDAY_DATE_TABLE
WHERE
inserted.HID = HOLIDAY_DATE_TABLE.HID) == 'Add') THEN
INSERT INTO HOLIDAY_DATE_TABLE (ACTION_TYPE)
VALUES ('Add')
WHERE inserted.HID = HOLIDAY_DATE_TABLE.HID;
END
我的语法有点偏,任何帮助都会受到赞赏。
答案 0 :(得分:0)
您可以使用具有相同效果的AFTER
触发器;
CREATE TRIGGER trg_hdt ON holiday_date_table
AFTER UPDATE AS
BEGIN
UPDATE hdt SET hdt.action_type='Change'
FROM holiday_date_table hdt JOIN inserted i ON hdt.id = i.id
WHERE hdt.action_type IS NULL
END;
基本上它的作用是将所有更新的行与表本身连接起来,并更改匹配的相应值。