使用触发器计算SQLite表中的运行总数

使用触发器计算SQLite表中的运行总数,sql,sqlite,Sql,Sqlite,如何创建SQLite触发器来计算“实际”表上的运行总计?下面的SQL代码应该更新AccountBalances表,以便余额列从1、2、3、。。。行数。但是,触发器仅更新第二行,即使我启用了递归_触发器。下面的结果是第1行=1,第2行=2,之后的行为空 CREATE TEMP TABLE "AccountBalances" ( "Id" INTEGER PRIMARY KEY, "DateId" INT, "AccountId" INT, "AccountCurrAmount"

如何创建SQLite触发器来计算“实际”表上的运行总计?下面的SQL代码应该更新AccountBalances表,以便余额列从1、2、3、。。。行数。但是,触发器仅更新第二行,即使我启用了递归_触发器。下面的结果是第1行=1,第2行=2,之后的行为空

CREATE TEMP TABLE "AccountBalances" (
  "Id" INTEGER PRIMARY KEY, 
  "DateId" INT,
  "AccountId" INT,
  "AccountCurrAmount" REAL,
  "Balance" REAL);

INSERT INTO "AccountBalances" 
  (DateId, AccountId, AccountCurrAmount)
  SELECT DateId, AccountId, Sum(AccountCurrAmount) 
    FROM Actual 
GROUP BY DateId, AccountId 
ORDER BY AccountId, DateId;

CREATE TRIGGER UpdateAccountBalance AFTER UPDATE ON AccountBalances
BEGIN
 UPDATE AccountBalances 
    SET Balance = 1 + new.Balance 
  WHERE Id = new.Id + 1;
END;

PRAGMA recursive_triggers = 'on';

UPDATE AccountBalances 
   SET Balance = 1 
 WHERE Id = 1
  • 请检查
    SQLITE\u MAX\u TRIGGER\u DEPTH
    的值。是否可以将其设置为1而不是默认的1000

  • 请检查您的SQLite版本。在3.6.18之前,不支持递归触发器

  • 请注意,以下内容对我来说100%有效

    删除表“账户余额”

    导致:

    Id  Balance
    1   1
    2   2
    3   3
    4   4
    5   5
    6   6
    

    关于我的SQLite版本,你是对的。它不起作用,因为我在Firefox上使用了SQLite Manager 0.5.15插件。当我使用官方的sqlite3.exe时,它起作用了。当我将它用于一个包含1000多行的表时,似乎得到了“错误:触发器递归级别太多”。我将不得不以另一种方式实现运行总计。
    Id  Balance
    1   1
    2   2
    3   3
    4   4
    5   5
    6   6