有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在触发器的帮助下更新不同sql表中的行

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

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

各表:

Ulist

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

存款

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

现在,每当用户执行交易时,金额将插入存款表,并在外键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中都尝试过这一点


共 (2) 个答案

  1. # 1 楼答案

    不需要触发器中的存款表内部联接。这应该起作用:

    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. # 2 楼答案

    未测试,但其思想是使用简单的update语句设置值。毫无疑问,这就是你犯错误的原因

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