用SQL SERVER 触发器+作业 实现用户积分的透明管理
2006-11-01 18:13
295 查看
用SQL SERVER 触发器+作业 实现用户积分的透明管理
前一段给客户做了一个,客户管理系统,系统里设计到了用户的积分问题。积分要求是:
1、用户每消费一元,积分自动加1
2、从用户注册日开始,每过 一天,用户的积分自动加1。
3、有特殊原因,管理员可以通过后台给用户加分或减分。
4、积分可以用来兑奖,兑奖后,自动减去相应的积分。
涉及到4个表:
1、clubuser用户表,2、consumelog记录用户的消费日志,3、scoreadd管理员为用户加的分。4、prizelog用户兑换过的奖品。
原来的系统实现是:
要求1:
他们的消费记录通常是导入的,每次导入后,需要重新计算一下所有用户的积分。
要求2:
用APPLICATION保存最后更新用户积分的时间,然后和当天判断,如果是不是当天,就给用户加分,设置APPLICATION为当天,如果是,就不进行操作。
要求3:
管理员为某个用户加过分以后,重新计算一下这个用户的积分。
要求4:
用户兑奖后,要重新计算一下他的积分。
感觉不是他合理:
1、导入后计算所有用户的积分不合理,因为,计算积分是很麻烦的,要把用户的消费积分,在网积分,管理员加的积分全部加起来,然后减去消费积分得出来,写入用户表。如果用户多了,消费记录多了,算起来要好几分钟。
2、每次都要判断APPLCATION的状态,感觉不合理。
3,4也不是太合理,都要重新计算用户的积分,感觉不合理。
所以做了调整。
1、3、4分别在表,consumelog,scoreadd,prizelog表中写触发器
2、建立一个作业,在每天0:00:00的时候为所有用户加1分。
实现细节:
1、表 consumelog 触发器
添加记录
CREATE TRIGGER addscore ON [dbo].[consumelog]
FOR INSERT
AS
declare @num as int
declare @uid as int
select @num=cmoney,@uid=userid from [inserted]
update clubuser set score=score+@num/2 where id=@uid
删除记录
CREATE TRIGGER decscore ON [dbo].[consumelog]
FOR DELETE
AS
declare @num as int
declare @uid as int
select @num=cmoney,@uid=userid from [deleteed]
update clubuser set score=score-@num where id=@uid
3、scoreadd触发器
添加记录
CREATE TRIGGER otheraddscore ON [dbo].[scoreadd]
FOR INSERT
AS
declare @num int
declare @uid int
select @num=score,@uid=userid from [inserted]
update clubuser set score=score+@num where id=@uid
(这个表不存在删除)
4、prizelog触发器
添加记录
CREATE TRIGGER prizedecscore ON [dbo].[prizelog]
FOR INSERT
AS
declare @num int
declare @uid int
declare @prid int
select @prid=prizeid,@uid=userid from [inserted]
select @num=Score from prize where id=@prid
update clubuser set score=score-@num where id=@uid
删除记录
CREATE TRIGGER prizeaddscore ON [dbo].[prizelog]
FOR Delete
AS
declare @num int
declare @uid int
declare @prid int
select @prid=prizeid,@uid=userid from [deleted]
if @@rowcount>0
begin
select @num=score from prize where id=@prid
update clubuser set score=score+@num where id=@uid
end
2、作业的建立
SQL SERVER--》管理--》SQL SERVER代理--》作业--》新建作业
常规 --名称:”每天添加金色俱乐部会员积分“
步骤--》新建...--》名称 ”添加分数"--》类型:TSQL--》数据库:你要操作的数据库--》命令:
update clubuser set score=score+1
调度 --》名称--》调度类型--》反复出现--》每天1次-->时间:0:00:00
点 确定保存。
在 作业列表中就有一个 作业,名称是 每天添加金色俱乐部会员积分
启动该作业前要先启动SQL SERVERAGENT,并设置为随系统启动,OK了。
这样做以后,只需要添加消费记录,加分记录,领取奖品的记录就可以了,不用每次操作都要考虑分数了。
相关文章推荐
- 用SQL SERVER 触发器+作业 实现用户积分的透明管理
- 用SQL SERVER 触发器+作业 实现用户积分的透明管理
- SpringSrcureCode在grails中实现用户--角色--权限的管理
- 实现业务系统中的用户权限管理--设计篇
- Java web项目01 停车管理系统实现添加用户信息功能(四)
- 利用ThreadLocal管理request和session以及用户信息,实现 Use anywhere
- JSP作业2 - 利用html实现简单的用户登录注册界面
- 用户信息统一管理实现方案
- 把Shark的用户管理模块改为Hibernate实现
- C#实现windows用户用户管理(转)
- 操作系统(2)——用户接口与作业管理
- 实现业务系统中的用户权限管理--设计篇
- 实现业务系统中的用户权限管理--设计篇
- JSP+Servlet培训班作业管理系统[6]-人员管理功能实现
- Android4.2的多用户管理中关于SD卡的实现改动
- 用户权限管理及动态菜单的实现
- 基于Visual C++之实现Windows用户管理
- SQL Server 用户管理:用 SQL 语句创建数据库用户(SQL Server 2005)