【问题标题】:SQL trigger not executing...doing something wrong?SQL 触发器未执行...做错了什么?
【发布时间】:2014-04-09 01:35:39
【问题描述】:

我有这个:

这是之前的 chars_insert。

BEGIN
    IF EXISTS (SELECT * FROM chars WHERE accid = NEW.accid)
    BEGIN
            INSERT INTO `char_vars` SET `charid = NEW.charid, `varname` = `NotFirstChar`, `value` = 1;
    END

    INSERT INTO `char_equip`     SET `charid` = NEW.charid;
    INSERT INTO `char_exp`       SET `charid` = NEW.charid;
    INSERT INTO `char_jobs`      SET `charid` = NEW.charid;
    INSERT INTO `char_pet`  SET `charid` = NEW.charid;
    INSERT INTO `char_points`    SET `charid` = NEW.charid;
    INSERT INTO `char_profile`   SET `charid` = NEW.charid;
    INSERT INTO `char_storage`   SET `charid` = NEW.charid;
    INSERT INTO `char_inventory` SET `charid` = NEW.charid;
END

我刚刚添加了 IF EXISTS 部分……它破坏了触发器。我正在尝试查找一个 accountid 是否已经有一个字符,如果有,则向创建的字符添加一个变量,说明这不是他们的第一个字符。它说错误出现在 IF EXISTS 行,但我没有看到任何错误...请帮忙?

【问题讨论】:

  • 触发器和过程的语法往往是特定于实现的。请用您正在使用的 SQL 方言进行标记。
  • @Turophile SQL server 2012,MySQL,并在 Navicat 中使用

标签: mysql sql triggers navicat


【解决方案1】:

尝试通过以下方式为 MySQL 更改代码:

BEGIN
    IF EXISTS (SELECT * FROM chars WHERE accid = NEW.accid) THEN
            INSERT INTO `char_vars` SET `charid` = NEW.charid, `varname` = `NotFirstChar`, `value` = 1;
    END IF;

    INSERT INTO `char_equip`     SET `charid` = NEW.charid;
    INSERT INTO `char_exp`       SET `charid` = NEW.charid;
    INSERT INTO `char_jobs`      SET `charid` = NEW.charid;
    INSERT INTO `char_pet`  SET `charid` = NEW.charid;
    INSERT INTO `char_points`    SET `charid` = NEW.charid;
    INSERT INTO `char_profile`   SET `charid` = NEW.charid;
    INSERT INTO `char_storage`   SET `charid` = NEW.charid;
    INSERT INTO `char_inventory` SET `charid` = NEW.charid;
END

此外,如果您的 NotFirstChars 是常量字符串(不是字段名称),您应该更改引号:'NotFirstChars'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    相关资源
    最近更新 更多