Возможно ли запускать SQLite при вставке только первой записи? - PullRequest
1 голос
/ 12 мая 2011

У меня есть таблица 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

Редактировать: Характер моего вопроса изменился между вводом заголовка и вводом описания.Выше мой оригинальный триггер.Мой первоначальный вопрос заключался в том, можно ли создать отдельный триггер для обработки только первой вставки, но теперь мне интересно, можно ли изменить существующий триггер для выполнения необходимых функций.

1 Ответ

0 голосов
/ 12 мая 2011

Я бы попробовал проверить, пуста ли таблица в первую очередь, и если это так, жестко запрограммировать баланс. Если нет, я бы вычислил его, используя ваш алгоритм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...