编写存储过程时出现问题

时间:2016-05-17 19:45:22

标签: sql stored-procedures mysqli

我有一个游戏桌子,可以跟踪游戏中取出的贷款。游戏无法读取时间戳,因此我必须使用基于增量的系统来告知在下一次贷款支付之前已经过了多少时间。基本上服务器每天重启6次,因此使用表中的列来跟踪重新启动确保玩家每天只在游戏中扣除1次贷款(否则它会扣除)每次重启都会打破玩家的银行。为了实现这一点,我希望有一个存储过程,服务器将在启动时运行,以增加表以跟踪谁应该在下一个重启周期进行付款。除了在表格中设置这些值外,大部分内容都在游戏中受到控制。

表格列:

id | active | balance | count | due | flags | default

所以这是存储过程的逻辑,它应该在所有行上运行。除非我从未编写过存储过程,也不确定如何根据条件将其应用于所有行。这是逻辑:

if active != 0 then continue with the below actions
if due == 0 and count > 1 then set count - 1
if due == 0 and count == 1 then set count = 6 and due = 1
if due == 1 then set count = 6
if balance  == 0 then set due = 0 and count = 0 and active = 0

我想要在所有列上运行。游戏将处理从玩家银行(另一张表)扣除余额,只要到期== 1然后设置到期= 0.它还将处理插入初始贷款并将所有值设置为默认值以启动上面的过程在下次重启。然后存储过程将处理其余的,因此如果它们的余额为0,它将停用贷款并将所有值清零。但是如果它处于活动状态,它会增加该播放器的服务器重启次数,并且如果6次重启已经过去,则设置到期标志,然后在玩家支付游戏费用和游戏设置后重新启动整个事件。 ; s due = 0。

我不是最好的SQL,更不用说存储过程了,特别是对于整个表。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

这应该让你非常接近。

CREATE PROCEDURE [dbo].[usp_theProcedure]
AS
BEGIN
UPDATE theTable
SET due = CASE WHEN balance = 0 THEN 0 WHEN (due = 0 AND [count] = 1) THEN 1 ELSE due END,
    [count] = CASE WHEN balance = 0 THEN 0 WHEN (due = 0 AND [count] = 1) OR due = 1 THEN 6 WHEN (due = 0 AND [count] > 1) THEN [count] - 1 ELSE [count] END,
    active = CASE WHEN balance = 0 THEN 0 ELSE active END
WHERE active <> 0
END
相关问题