【问题标题】:SQLite not finding field in triggerSQLite 在触发器中找不到字段
【发布时间】:2014-12-03 10:35:49
【问题描述】:

我有两张桌子。一个是扣减,另一个是deductTrans。 idDeductions 是 Deductions 中的 key 字段,是 deductTrans 中的外键。当插入 deductTrans 时,我想在扣除中自动做几件事。我有这个触发器,它可以编译。

    CREATE TRIGGER trig_DeductTrans AFTER INSERT ON DeductTrans
    BEGIN
        UPDATE Deductions
    SET remainingCt = remainingCT - 1
    WHERE
        idDeductions = New.idDeductions ;
    END;

当我插入一条记录时,我收到以下错误:“没有 idDeductions 这样的列”

我很茫然。我尝试将 WHERE 更改为 Deductions.idDeductions = New.idDeductions 但没有帮助。有什么想法吗?

【问题讨论】:

  • 显示两个表的定义。

标签: sql sqlite triggers


【解决方案1】:

SQLite 声称Deductions 表没有名为“idDeductions”的列。你没有给我们任何检查的方法,但很可能它是正确的。我观察到您的触发器位于不同的表 (DeductTrans) 上,显然您希望该表也有一个列 idDeductions

Deductions 中的对应列很可能名称不同。例如,它可能只是简单地命名为id

【讨论】:

  • 我希望是这样。它会解释很多,但这里是创建代码的第一部分:CREATE TABLE "Deductions" ("idDeductions" TEXT NOT NULL,....
  • 那么,DeductTrans 是否有不同名称的列?或者作为一个疯狂的猜测,当此触发器失败时,您是否可能没有为DeductTrans.idDeductions 插入显式值? (如果你不这样做,我怀疑它应该失败,但软件有错误。)
【解决方案2】:

好的。奇怪。我在 Navicat Premium 上对此进行了测试。厌恶地保存了扳机,关闭程序,去吃午饭。回来,以为我会再试一次。像魅力一样工作。打败我们的我!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多