sqlite触发器导致"没有这样的列"例外

时间:2015-07-14 18:07:21

标签: sqlite triggers

我是一个使用sql触发器的新手,并且在一个简单的例子中得到了一个ESQLiteException。当我尝试修改" memberTag"在现有行中的列,我得到异常"没有这样的列:memberTag"。如果我放下触发器,则异常消失并且行更新。

我正在使用SQLite,而且我正在使用" SQLite Expert Personal"应用程序进行此项实验。

我有这张桌子:

CREATE TABLE [znode] (
  [description] CHAR NOT NULL, 
  [memberTag] CHAR);

并触发:

CREATE TRIGGER [memberTagTrigger]
AFTER UPDATE
ON [znode]
FOR EACH ROW
WHEN length(memberTag)=0
BEGIN
update znode
  set memberTag = null;
END;

我的更新实验数据是这样的:

description  memberTag
one          x
two          (null)

当我尝试将(null)更改为" y"使用SQLite Expert Personal,它会抛出异常。

1 个答案:

答案 0 :(得分:0)

问题出在WHEN子句中:数据库不知道memberTag的来源,因为有两个可能的行,旧行和新行。

使用OLD.memberTagNEW.memberTag

(还有一个问题:UPDATE将更改表中的所有行,因为您忘记了WHERE子句。)