sqlite 当插入年龄< 0时触发更新年龄

qojgxg4l  于 2022-11-14  发布在  SQLite
关注(0)|答案(2)|浏览(169)

如果插入的年龄为负数,我会尝试将年龄设置为0。我不知道代码出了什么问题:

CREATE TRIGGER verify_age
BEFORE INSERT ON customers
FOR EACH ROW
WHEN (NEW.age < 0)
BEGIN
UPDATE customers
SET age = 0
END;
bnlyeluc

bnlyeluc1#

代码中的语法错误是它在END之前缺少;,但是即使您纠正了这个错误,它也不会解决您的问题。
您需要在UPDATE语句中使用WHERE子句,以便只更新新行,而不更新整个表。
WHERE子句中的条件将检查新行的rowid,但此rowid仅在插入*行之后存在。
因此,您必须将触发器更改为AFTER INSERT触发器:

CREATE TRIGGER verify_age AFTER INSERT ON customers
  WHEN NEW.age < 0
  BEGIN
    UPDATE customers
    SET age = 0
    WHERE rowid = NEW.rowid;
  END;

请参阅demo

rhfm7lfc

rhfm7lfc2#

试试这个:

CREATE OR REPLACE TRIGGER validate_age
    BEFORE INSERT
    ON customers
    FOR EACH ROW
BEGIN
    IF :new.age < 0
    THEN
        :new.age := 0;
    END IF;
END;

或者:

CREATE TRIGGER validate_age 
       BEFORE INSERT ON customers
    BEGIN
       SELECT
          CASE
        WHEN NEW.age < 0 THEN
          NEW.age = 0
           END;
    END;

相关问题