Triggers SQLite触发器问题-“无此类列”

Triggers SQLite触发器问题-“无此类列”,triggers,sqlite,Triggers,Sqlite,我有一个sqlite数据库,其中有一个名为“成就”的表,它存储了在我构建iphone项目学习objective-c的一个简单测验中是否达到了某些成就。表格结构为: ID Name Completed ============================= 1 FiveInARow 0 2 TenInARow 0 3 AllCorrect 0 4 UnderASecond 0 5

我有一个sqlite数据库,其中有一个名为“成就”的表,它存储了在我构建iphone项目学习objective-c的一个简单测验中是否达到了某些成就。表格结构为:

ID    Name           Completed  
=============================
1     FiveInARow     0  
2     TenInARow      0  
3     AllCorrect     0  
4     UnderASecond   0  
5     AllCompleted   0  
ID是主键,Name是VARCHAR,Completed是BOOL 0表示false,1表示true

我试图在这个表的update语句中添加一个触发器,这样,当一个已完成的列设置为1时,即成就已完成-这是表上唯一的更新,将进行计算,以查看是否所有其他成就已完成,如果已完成,还将所有已完成的成就ID 5更新为1

我创建的触发器是: 更新成就后创建触发检查成就 从成就中选择SUMCompleted=从成就中选择COUNTCompleted-1时 开始更新成就集Completed=1,其中Name='AllCompleted'

所以我想做的是,把完成的行的和与总计数减去1进行比较,如果它们匹配,那么这意味着除了AllCompleted成就之外的所有成就都实现了,所以我们也可以将其设置为真。触发器创建得很好

现在是问题所在-当我尝试使用以下语句更新表时

更新成就集已完成=1,其中ID=1

我收到错误消息“未完成此类列”

我是不是在试图做一些根本错误的事情?我不可能使用触发器来实现这一点吗?有什么建议吗


谢谢。

通常这是您正在更新的表中的一个突变

触发器应该设置如下值

new_rec.completed := 1;
不要尝试进行其他更新。
请原谅我的Oracle语法

我认为不应该在更新表时从触发器更新表,这可能是一个无限递归。也许SQLite不喜欢这样,但请仔细检查您是否按照数据库中的拼写拼写了所有内容,然后做出错误的诊断。在您的示例中,您声明表名为“成就”,但在两处引用了成就

解决这个问题应该会解决你的问题。最终SQL如下所示:

CREATE TRIGGER "checkAllAchievements" 
AFTER UPDATE ON Achievements
WHEN (SELECT SUM(Completed) FROM Achievements) = (SELECT COUNT(Completed)-1 FROM Achievements)
BEGIN 
  UPDATE Achievements SET Completed=1 WHERE Name='AllCompleted';
END;

谢谢-当我复印时,他们只是问题中的打字错误,这个问题仍然存在,所以我真的看不出出哪里出了问题-所以采取了一些激烈的行动,完全放下触发器&表格并重新创建它们-所有的工作都很好,所以一定是某个地方的一个愚蠢的打字错误-这可能使这个问题成为有史以来最糟糕的问题之一!