【问题标题】:SQL syntax error on update in trigger using variable使用变量在触发器中更新时出现 SQL 语法错误
【发布时间】:2016-04-28 13:47:30
【问题描述】:

我正在尝试在调用触发器时更新表,但更新语句出现语法错误。

触发体:

set @diff = old.amount -new.amount;
UPDATE decks
SET decktotal = decktotal + @diff
WHERE deckname = old.deckname;

如果需要,我会添加更多信息,但我认为这是我的一个特殊愚蠢的疏忽,很容易纠正。无论哪种方式都感谢您的关注!

编辑:ERROR 1064 语法错误

UPDATE decks
SET decktotal = decktotal + @diff
FROM old
WHERE deckname = old.deckname;

【问题讨论】:

  • declare @diff money 也许?
  • 标记 dbms,该代码是特定于产品的。
  • @a_horse_with_no_name MySQL
  • 感谢@jarlh,现在标记!
  • @Arvo 我正在使用 MySQL,我认为我不必在 mySQL 中声明变量,谢谢!

标签: mysql database triggers sql-update syntax-error


【解决方案1】:

我认为您遇到的问题出在 where 子句中 你使用:

WHERE deckname = old.deckname;

问题在于更新中未指定旧表。为了解决这个问题,创建一个变量并将其分配给 where 子句中的甲板名称。 或者设置后你需要添加旧表。

解决方案1:

declare @old_name varchar(20);     //Disregard if you don't need to declare
select @old_name = old.deckname;
SET @diff = old.amount -new.amount;
UPDATE decks
SET decktotal = decktotal + @diff
WHERE deckname = @old_name;

解决方案2:

SET @diff = old.amount -new.amount;
UPDATE decks
SET decktotal = decktotal + @diff
FROM old
WHERE deckname = old.deckname;

【讨论】:

  • 嘿,你是什么意思设置后我需要添加旧表?谢谢!另外,Soloution2 是我开始使用的,是的,错误出现在 where 子句中。
  • 查看“解决方案2”。当您在 where 子句中引用“deckname = old.deckname”时,您需要使用“FROM”old,因为您在 where 子句中引用了该表。或者您收到的确切错误是什么?
  • 哦抱歉没看到,我现在试试。
  • 另一种测试方法是在 where 子句中硬编码 deckname:WHERE deckname = 'somename';
  • 嘿,尝试使用某个名称进行测试,但仍然出现错误。我已将错误添加到上面的代码中!我希望这会有所帮助。
猜你喜欢
  • 2020-11-05
  • 2012-10-06
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
  • 2012-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多