【问题标题】:How to update a row in a different sql table with the help of Triggers如何在触发器的帮助下更新不同 sql 表中的行
【发布时间】:2017-05-10 23:25:15
【问题描述】:

我目前正在开发一个 Java Swing 应用程序。该应用程序允许用户执行不同类型的交易。我在 MS SQL 中创建了一些表来存储用户数据。以下是我目前面临的问题。

我有一个名为“UList”的表,其中包含有关用户的所有信息。这个特定的表还包含一个名为“余额”的列,它将保存用户的余额。还有一个名为“Deposits”的表,它将保存存款金额。

表格:

Ulist

╔══════╦═════════╗
║ id   ║ balance ║
╠══════╬═════════╣
║    1 ║    6000 ║
║    2 ║    4000 ║
╚══════╩═════════╝

存款

╔══════╦══════╗
║ amt  ║   id ║
╠══════╬══════╣
║ 1000 ║    2 ║
║ 1000 ║    1 ║
║  500 ║    1 ║
║  500 ║    1 ║
╚══════╩══════╝

现在,每当用户执行交易时,amt 将被插入到存款表中,并在外键 ID 的帮助下更新/添加到余额中。我尝试了以下触发器,但它没有按预期工作。

create trigger d_trigger
ON Deposits
AFTER INSERT
AS
UPDATE u set u.balance=u.balance+d.amt from UList u INNER JOIN deposits d on u.id=d.id INNER JOIN inserted i on i.id=d.id

当我插入相同的数字时,此触发器有效。如果我插入 500,那么它将成功在余额中添加 500,但是当我使用另一个数字(如 1000)时,它会更新不正确的值。我在不同的表上有几个这样的触发器,它们执行类似的操作,如提款、转账等。

非常感谢您对这个问题的帮助!

注意:如果您想知道是否是 Java 代码导致了此问题。我在应用程序和 MS SQL Server 中都尝试过。

【问题讨论】:

  • 这是因为您的连接条件在 deposits 表中找到了相同 id 的多个条目。您需要捕获amountid 中给出的insert 语句中的deposit

标签: java sql sql-server sql-server-2008


【解决方案1】:

不需要 TRIGGER 中的 Deposits 表的 INNER JOIN。这应该有效:

alter trigger d_trigger
ON Deposits
AFTER INSERT
AS
    UPDATE u 
    set u.balance=u.balance+i.amt 
    from UList u 
    INNER JOIN inserted i on i.u_Id=u.u_Id

【讨论】:

  • 这就像一个魅力!非常感谢您抽出宝贵时间回答我的问题 :) 。我真的很感激。
【解决方案2】:

未测试,但想法是使用简单的更新语句设置值。毫无疑问,这就是您的错误的原因。

create trigger d_trigger
ON Deposits
AFTER INSERT
AS
UPDATE UList set balance = balance + :new.amt
WHERE id = :new.id;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    相关资源
    最近更新 更多