如果剩下一些金额,减少价值

时间:2017-12-09 20:29:46

标签: sql sql-server tsql stored-procedures

我有一张桌子

id|item_id | user_id |amount | date
1    21         12      6       2017-05-12  
2    21         12      20      2017-05-12
3    16         234     10      2017-06-12
4    21         16      25      2017-06-12
5    54         12      20      2017-08-01
6    112        12      2       2017-09-23
...

我收到了其他数据,例如:

itemId = 21
userId = 12
amount = 10

然后我需要在上一张表中更新金额。对于用户12和项目21,我必须分别更新第一和第二记录6到0和20到16以满足我收到的10个数量。

我该怎么做?我的存储过程就可以了。我不想使用光标。

1 个答案:

答案 0 :(得分:0)

你可以使用它。

DECLARE @itemId INT = 21
DECLARE @userId INT = 12
DECLARE @amount INT = 10

DECLARE @new_amount INT = 0

UPDATE  TableTest
SET 
    @new_amount = CASE WHEN (Amount - @amount) < 0 THEN 0 ELSE Amount - @amount END
    , @amount = CASE WHEN @amount - Amount < 0 THEN 0 ELSE @amount - Amount END
    , Amount = @new_amount
FROM TableTest
WHERE item_id = @itemId
    and [user_id] = @userId