【问题标题】:Possible to have SQLite trigger fire on insert of first record only?只能在插入第一条记录时触发 SQLite 触发器吗?
【发布时间】:2011-05-11 21:15:10
【问题描述】:

我有一个带有余额字段的 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

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

【问题讨论】:

    标签: sqlite triggers


    【解决方案1】:

    我会先尝试检查表是否为空,如果是,则对余额进行硬编码。如果没有,我会使用你的算法计算它。

    【讨论】:

    • 这发生在我身上,但我不确定这是否是正确的方法。让别人说“做”对我来说就足够了。
    • @MichaelItzoe:介意分享一下你是如何解决这个问题的吗?我正在尝试做something similar
    猜你喜欢
    • 2013-06-11
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多