【发布时间】:2011-09-30 21:13:39
【问题描述】:
我有一个 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)。
我正在尝试在此表的更新语句中添加一个触发器,这样当 Completed 列设置为 1(即成就已完成 - 这是表上将发生的唯一更新)时,将进行计算查看是否所有其他成就都已完成,如果已完成,请将 AllCompleted 成就 (ID 5) 更新为 1。
我创建的触发器是: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';
所以我要做的是取已完成行的总和并将其与总数减 1 进行比较,如果它们匹配,则意味着除了 AllCompleted 成就之外的所有成就都已实现,因此我们也可以设置为真。触发器创建得很好。
现在解决问题 - 当我尝试使用以下语句更新表时
UPDATE Achievements SET Completed = 1 WHERE ID = 1
我收到错误消息“未完成此类列”。
我是否试图做一些根本错误的事情?我不可能使用触发器来实现这一点吗?有什么建议吗?
谢谢。
【问题讨论】: