2016-05-17 60 views
0

我有一张游戏的表格,用于跟踪游戏中取出的贷款。游戏无法读取时间戳,因此我不得不使用基于增量的系统来告知在下一笔贷款支付前已经过了多少时间。基本上,服务器每天重新启动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次重新启动后设置应有标志,然后在玩家在游戏中支付并且游戏设置的到期值= 0时重新启动整个事情。

我不是SQL最大的,更不用说存储过程了,尤其是整个表。任何帮助,将不胜感激。

回答

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 
+0

这是我得到的:MySQL说:#1064 - 你的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,在[[count] = 1附近使用正确的语法)THEN 1 ELSE due END,[count] = CASE WHEN balance = 0 THEN 0 WH'at line 3 – Flynn

+0

尝试删除括号。 MySQL可能不喜欢它们。 – Bill

+0

同样的错误,但第7行noiw – Flynn