我有一张桌子
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个数量。
我该怎么做?我的存储过程就可以了。我不想使用光标。
答案 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