您好我正在尝试为SQL触发器声明一些用户定义的变量(EX:@var),该触发器对给定subscriberID的所选行中的值求和。但是,我在DECLARE语句中收到语法错误。
这是我的代码:
DELIMITER //
CREATE TRIGGER trg_subscribers_points
AFTER UPDATE ON subscribers_points FOR EACH ROW
BEGIN
DECLARE @Sub_ID bigint, @Col1 bigint, @Col2 bigint, @Col3 bigint
(select @Sub_ID = subscriber_id, @Col1 = action, @Col2 = share, @Col3 = viral FROM subscribers_points)
update subscribers_points set total_points = @Col1 + @Col2 + @Col3 where subscriber_id = @Sub_ID
END//
DELIMITER ;
么?提前谢谢。
更新代码:
DELIMITER //
CREATE TRIGGER trg_subscribers_points
BEFORE UPDATE
ON subscribers_points
FOR EACH ROW
BEGIN
SET NEW.total_points = (action + share + viral);
END//
DELIMITER ;
^这会在'字段列表'中返回“未知列'操作'”错误。
动作,分享和病毒是表subscriber_points中的所有列名,所以我不确定它为什么会返回此错误。
答案 0 :(得分:1)
我不确定您的错误是什么,但您不需要为此目的使用变量。你有几个问题。首先,您不应在更新后再次更新该行。而且,您的触发器实际上并不是指要更改的数据。我怀疑你想要这样的东西:
DELIMITER //
CREATE TRIGGER trg_subscribers_points
BEFORE UPDATE ON subscribers_points FOR EACH ROW
BEGIN
set new.total_points = (new.action + new.share + new.viral)
END//
DELIMITER ;
请注意,触发器已更改为“更新前”触发器。