2011-05-11 2 views
1

누적 합계로 사용될 잔액 필드가있는 SQLite 테이블이 있습니다. 새 레코드를 삽입 할 때 균형을 계산하는 트리거가 정의되어 있지만 첫 번째 레코드에서 균형이 0이되도록 첫 번째 삽입에서 실행되지 않습니다. 다음의 모든 레코드가 올바르게 계산됩니다.첫 번째 레코드 삽입시 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

이것은 나에게 발생했지만 올바른 방법인지는 확실하지 않았습니다. 누군가 다른 사람이 "해라"라고 말하면 나를 위해 충분합니다. –

+0

@MichaelItzoe : 어떻게 문제를 해결했는지 공유하는 마음? 내가 [비슷한] (http://stackoverflow.com/q/16906172/89771) 할려고 해요. –

관련 문제