【问题标题】:Can anyone tell me why my table field reference not work with this trigger query?谁能告诉我为什么我的表字段引用不适用于此触发器查询?
【发布时间】:2020-05-11 06:08:17
【问题描述】:

我在为我的 sqlite 项目格式化更新触发器时遇到问题。 该项目有2张桌子。一张表名为Equipment,有3个字段:

 - UnitID
 - Last_PMI
 - Preset_Hrs

另一个表名为ESPModules,它也有3个字段:

 - UnitID (FK)
 - ESPModuleID
 - Install_Date

我在ESPModules 表上设置了一个更新触发器,每次我更改ESPModules 表中的UnitID 字段时都会触发该触发器。 UnitID 字段与设备表具有一对一的关系。 (两个表只允许一个唯一的UnitID)

我的触发器实际上触发了,但我不知道如何引用ESPModules 表中的UnitID 字段。以下是我目前所拥有的,这段代码在触发时会更新设备记录:

UPDATE Equipment
SET Last_PMI = date('now'),
Preset_Hrs = 0
WHERE UnitID = "BT-109F"


UPDATE Equipment
SET Last_PMI = date('now'),
Preset_Hrs = 0
WHERE UnitID = ESPModules.UnitID;

但问题是我需要像上面那样引用我的ESPModules.UnitID 字段:(换句话说,作为一个例子,当我输入现有的UnitID 像“BT-109F”时,它会触发但不会触发当我尝试引用我正在更新和保存的字段时工作。它抛出此错误:“提交数据时发生错误:没有这样的列:ESPModules.UnitID

我是 sql 语言的新手,希望在正确格式化此更新查询方面得到一些帮助。

谢谢

部落

【问题讨论】:

    标签: sql sqlite sql-insert database-trigger


    【解决方案1】:

    这在the SQLite create trigger documentation中有解释:

    触发器操作可以使用“NEW.column-name”和“OLD.column-name”形式的引用访问正在插入、删除或更新的行的元素,其中column-name 是来自的列的名称触发器关联的表。

    所以,考虑一下:

    UPDATE Equipment
    SET Last_PMI = date('now'),
    Preset_Hrs = 0
    WHERE UnitID = NEW.UnitID;
    

    【讨论】:

    • 欢迎@Clan!如果我的回答正确回答了您的问题,请点击复选标志accept it。如果你觉得它有用,你也可以投票(使用上箭头)。
    • 抱歉,我没有意识到我必须接受并投票。完成,再次感谢。
    猜你喜欢
    • 2013-05-08
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    相关资源
    最近更新 更多