2012-12-01 390 views
1

这是我的CASE/WHEN语句。但正如你可能看到我得到这个错误。我不知道为什么。 我想要做的就是检测MAJKA领域的某些变化。因此,如果列MAJKA的其他字段为空,请不要触摸它们,但请将值MAJKA的这些字段的值更改为不为空的新值。SQLite CASE/WHEN语句

SQL Error: near "UPDATE": syntax error <CREATE TRIGGER [test] 
AFTER UPDATE OF [MAJKA] 
ON [unos_golub] 
FOR EACH ROW 
BEGIN 

SELECT majka, 
CASE WHEN majka='' 

THEN 
(UPDATE unos_golub SET broj_goluba=NEW.majka WHERE broj_goluba=OLD.majka) 

ELSE 
(UPDATE unos_golub SET broj_goluba=NEW.majka WHERE broj_goluba=OLD.majka 
UPDATE unos_golub SET majka=NEW.majka WHERE majka=OLD.majka) 
END 

FROM unos_golub; 

回答

1

SQLite没有通用机制来有条件地执行命令。 然而,在触发器,可以对整个触发器使用WHEN条件:

CREATE TRIGGER test_for_broj_goluba 
AFTER UPDATE OF majka ON unos_golub 
BEGIN 
    UPDATE unos_golub SET broj_goluba=NEW.majka WHERE broj_goluba=OLD.majka; 
END; 

CREATE TRIGGER test_for_majka 
AFTER UPDATE OF majka ON unos_golub 
WHEN NEW.majka <> '' 
BEGIN 
    UPDATE unos_golub SET majka=NEW.majka WHERE majka=OLD.majka; 
END; 

(。第UPDATE是在两种情况下相同的,因此不需要WHEN

+0

帮我谢谢。 我用OLD.majka =''和OLD.majka!=''来检查字段是否为空或不是 – FosAvance

1

您正在将数据操纵(DML)语句放在需要返回值的表达式的地方。试想一下:

SELECT majka, 
CASE WHEN majka='' 

THEN 
'it is empty' 

ELSE 
'it is not empty' 

END 

这会给你一个列,其中值是“为空”或“不为空”,取决于在前面列的值。

您不能在DML语句中插入SQL --DML语句不是带值的表达式。