我是一个使用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,它会抛出异常。
答案 0 :(得分:0)
问题出在WHEN子句中:数据库不知道memberTag
的来源,因为有两个可能的行,旧行和新行。
使用OLD.memberTag
或NEW.memberTag
。
(还有一个问题:UPDATE将更改表中的所有行,因为您忘记了WHERE子句。)