我目前正在开发 Java Swing 应用程序。该应用程序允许用户执行不同类型的交易。我在 MS SQL 中创建了一些表来存储用户数据。以下是我目前面临的问题。
我有一个名为“UList”的表,其中包含有关用户的所有信息。这个特定的表还包含一个名为“余额”的列,它将保存用户的余额。还有另一个名为“Deposits”的表,它将保存存款金额。
表格:
列表
╔══════╦═════════╗
║ id ║ balance ║
╠══════╬═════════╣
║ 1 ║ 6000 ║
║ 2 ║ 4000 ║
╚══════╩═════════╝
存款
╔══════╦══════╗
║ amt ║ id ║
╠══════╬══════╣
║ 1000 ║ 2 ║
║ 1000 ║ 1 ║
║ 500 ║ 1 ║
║ 500 ║ 1 ║
╚══════╩══════╝
现在,每当用户执行交易时,amt 将被插入到 Deposit 表中,并在外键 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 中都尝试过。
最佳答案
不需要 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
关于java - 如何在触发器的帮助下更新不同 sql 表中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41332217/