创建触发器不允许不在另一列中的值

Creating a trigger not allowing a value that isn't in another column

我对要创建的触发器有疑问,但我不确定如何创建。

我有一个 table、2017_state_data,它包含每个州的一些财务指标以及所述州名。现在重要的是状态名称始终正确(当然状态存在)并且我想创建一个触发器,如果​​“状态”的值与状态名称不一致(来自另一个 table ) 那么它应该按照“进入状态未知”的方式给出警告信息。 我不完全确定如何引用来自不同 table 的列以用于触发器,我希望有人能帮助我。

下面是我创建的触发器,但这不起作用,给我留下了“输入不完整”的错误。

CREATE TRIGGER sureState
    BEFORE INSERT ON 2017_state_data
FOR EACH ROW
    WHEN NEW.State != (SELECT StateName FROM States)
        BEGIN SELECT RAISE(ABORT, "Unknown state in entry")
END;

在此先感谢您的帮助。

您的要求有一个名称,它是 Referential integrity

您所要做的就是定义 table 2017_state_data 的列 State 以便它引用 table StateName 的列 States:

CREATE TABLE 2017_state_data (
  ........................
  State TEXT REFERENCES States(StateName),
  ........................
);

现在,如果您启用 Foreign Key Support(默认情况下禁用):

PRAGMA foreign_keys = ON;

您确保 StateName 中不存在的值不能输入 State 并且不需要触发器。