Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建MySQL触发器,以便在插入或更新后使用来自另一个表中字段的数据更新表的总和_Mysql_Sql Server - Fatal编程技术网

如何创建MySQL触发器,以便在插入或更新后使用来自另一个表中字段的数据更新表的总和

如何创建MySQL触发器,以便在插入或更新后使用来自另一个表中字段的数据更新表的总和,mysql,sql-server,Mysql,Sql Server,我有以下代码: CREATE TRIGGER INSERT_TO_VOTE_UPDATE_SUM_VOTES ON Voting AFTER UPDATE, INSERT AS BEGIN DECLARE @VOTING_PARTY_ID INT, @SUM_VOTES INT SELECT @VOTING_PARTY_ID = PoliticalPartyID FROM INSERTED SELECT @SUM_VOTES = SUM(Votes) FROM Voting WHERE Po

我有以下代码:

CREATE TRIGGER INSERT_TO_VOTE_UPDATE_SUM_VOTES ON Voting
AFTER UPDATE, INSERT
AS
BEGIN
DECLARE @VOTING_PARTY_ID INT, @SUM_VOTES INT

SELECT @VOTING_PARTY_ID = PoliticalPartyID FROM INSERTED

SELECT @SUM_VOTES = SUM(Votes) FROM Voting WHERE PoliticalPartyID = 
@VOTING_PARTY_ID

UPDATE PoliticalParties SET Total=@SUM_VOTES WHERE PoliticalPartyID = 
@VOTING_PARTY_ID
END

在SQL Server上,我喜欢在MySQL数据库上创建相同的触发器,我似乎无法正确声明变量,也无法在新表或旧表中找到正确的字段

我的尝试是:

CREATE TRIGGER INSERT_TO_VOTE_UPDATE_SUM_VOTES
    AFTER INSERT
    ON Voting
    FOR EACH ROW

BEGIN

DECLARE VOTING_PARTY_ID INT, @SUM_VOTES INT

SELECT @VOTING_PARTY_ID = PoliticalPartyID FROM NEW

SELECT @SUM_VOTES = SUM(Votes) FROM Voting WHERE PoliticalPartyID = 
@VOTING_PARTY_ID

UPDATE PoliticalParties SET Total=@SUM_VOTES WHERE PoliticalPartyID = 
@VOTING_PARTY_ID
END

[42000][1064] You have an error in your SQL syntax; check the manual that 
corresponds to your MariaDB server version for the right syntax to use near 
' @SUM_VOTES INT  SELECT @VOTING_PARTY_ID = PoliticalPartyID FROM NEW  
SELECT' at line 8

1您不需要从“新建”中选择,您可以访问“新建”中的所有字段,如下所示: NEW.field\u名称

2您可以在DECLARE变量中进行选择

试试这个:

CREATE TRIGGER INSERT_TO_VOTE_UPDATE_SUM_VOTES
    AFTER INSERT
    ON Voting
    FOR EACH ROW
BEGIN

    DECLARE SUM_VOTES INT;

    SELECT SUM(Votes) FROM Voting 
    WHERE PoliticalPartyID = NEW.PoliticalPartyID 
    INTO SUM_VOTES;

    UPDATE PoliticalParties SET Total = SUM_VOTES WHERE PoliticalPartyID = 
    NEW.PoliticalPartyID
END

你的帖子不清楚,你是想在SQL Server还是MySQL上运行它?它们是完全不同的产品。我试图获得与上述代码相同的结果,这些代码在MySQL数据库上的SQL Server上运行良好@Larnu他当前的代码是SQL Server MSSQL。。MySQL不支持更新后,在MySQL中插入您需要进行分离的更新和插入触发器。我尝试将它们分离,但收到错误消息关于没有正确的语法。syntaxi似乎无法正确声明变量或在新表或旧表上找到正确的字段我尝试将它们分离,但收到错误消息关于没有正确的语法显示您的MySQL尝试代码和错误消息?获取以下错误:[42000][1064]您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,了解在第9行“从投票中选择SUMVotes,其中PoliticalPartyID=NEW.PoliticalPartyI”附近使用的正确语法修复了上述代码,我们需要添加一个“;”宣布总票数;最后更新政治党派集合总数=总票数,其中政治党派ID=新。投票党派ID必须是:更新政治党派集合总数=总票数,其中政治党派ID=政治党派ID非常感谢您的解决方案谢谢您的回复,我按照您所说的更新了代码。谢谢你的投票: