2011-05-11 68 views
1

我有一个SQLite表,其中一个Balance字段将用作运行总数。我定义了一个触发器,用于在插入新记录时计算余额,但不会在第一次插入时触发,因此第一条记录中的余额为零。以下所有记录计算正确。可能让SQLite触发只插入第一条记录吗?

当前触发定义:

CREATE TRIGGER [UpdateBalance_Insert] AFTER INSERT ON [Transaction] FOR EACH ROW BEGIN 
REPLACE INTO [Transaction] 
SELECT t1.[ID], 
     t1.[Date], 
     t1.[Transaction], 
     t1.[Debit], 
     t1.[Credit], 
     ( SELECT SUM(t2.[Credit]) - SUM(t2.[Debit]) + new.[Credit] - new.[Debit] 
      FROM [Transaction] AS t2 
      WHERE t2.[Date] < t1.[Date] OR ( 
        t2.[Date] = t1.[Date] AND t2.[ID] < t1.[ID]) 
     ) AS [Balance] 
FROM [Transaction] AS t1 
WHERE [ID] = new.[ID]; 

UPDATE [Transaction] 
SET  [Balance] = [Balance] + new.[Credit] - new.[Debit] 
WHERE [Date] > new.[Date]; 
END 

编辑:我的问题输入标题,然后键入描述之间改变的性质。以上是我的原始触发器。我原来的问题是是否可以创建一个单独的触发器来处理第一个插入,但现在我想知道是否可以修改现有的触发器来执行所需的功能。

回答

0

我想尝试检查表是否为空,如果是,请对天平进行硬编码。如果没有,我会用你的算法来计算它。

+0

这发生在我身上,但我不确定这是否是正确的选择。简单地让别人说“做吧”对我来说已经够好了。 – 2011-05-12 13:54:48

+0

@MichaelItzoe:分享你是如何解决问题的?我正在尝试[类似的东西](http://stackoverflow.com/q/16906172/89771)。 – 2013-06-03 21:41:53