2011-05-11 44 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

相關問題