在INSERT上验证表记录的SUM

时间:2011-11-29 15:14:23

标签: sql-server database sql-server-2008 tsql

我有一张表来跟踪各种帐户的交易:

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

实现这一目标的最佳方法是什么?检查约束,触发器,或者只检查存储过程中的这种情况吗?

2 个答案:

答案 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
        )