创建触发器不允许不在另一列中的值
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
并且不需要触发器。
我对要创建的触发器有疑问,但我不确定如何创建。
我有一个 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
并且不需要触发器。