我有一张表来跟踪各种帐户的交易:
AccountTransactions
AccountTransactionID int NOT NULL (PK)
AccountID int NOT NULL (FK)
Amount decimal NOT NULL
在此表中插入负数的记录时,我需要验证指定帐户的amount列的SUM是否大于零。如果新记录将导致此SUM低于零,则不应插入记录。
例如,如果我有以下记录,则不允许为AccountID
5插入-8.00的金额:
AccountTransactionID AccountID Amount
---------------------------------------------
1 5 10.00
2 6 15.00
3 5 -3.00
实现这一目标的最佳方法是什么?检查约束,触发器,或者只检查存储过程中的这种情况吗?
答案 0 :(得分:2)
你可以做一个简单的检查:
DECLARE @TheSum decimal(18,2)
SET @TheSum = (SELECT SUM(MyCol) FROM MyTable WHERE AccountID = @SomeParameter)
If @TheSum > 0
BEGIN
--do your insert
END
...
答案 1 :(得分:0)
您可以在插入中添加where
子句:
insert YourTable
(AccountID, Amount)
select @AccountID, @Amount
where 0 <=
(
select @Amount + sum(Amount)
from YourTable
where AccountID = @AccountID
)