关于用户帐户点数字段的设计问题--求指点?? 某个用户的ID下有一个字段count用于记录其帐户点数余额,因为有一个试用功能,需要在注册及完成特定任务时赠送一些点数,所以另设置一字段count_temp,并为此字段内的余额设置一个月有效期,赠送的点数必须在赠送后一个月内使用,否则过期作废。但是这样用户在需要扣点数的时候必须判断两字段值,实现起来比较麻烦,但如果只用一字段又无法为赠送的点数作有效期计算,不得其解,特请高人指点非常感谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 --用一个计算列放可用点数.--在扣点的时候,先扣赠送点数create table tb(id int,购买点数 int,赠送点数 int,赠送日期 datetime,可用点数 as (case when datediff(d,赠送日期,getdate())<=30 then 购买点数+赠送点数 else 购买点数 end))goinsert into tb(id,购买点数,赠送点数,赠送日期) select 1,500,60,'2011-10-11'insert into tb(id,购买点数,赠送点数,赠送日期) select 2,500,60,'2011-10-18'insert into tb(id,购买点数,赠送点数,赠送日期) select 3,500,60,'2011-10-26'insert into tb(id,购买点数,赠送点数,赠送日期) select 4,500,60,'2011-11-11'goselect * from tb/*id 购买点数 赠送点数 赠送日期 可用点数----------- ----------- ----------- ----------------------- -----------1 500 60 2011-10-11 00:00:00.000 5002 500 60 2011-10-18 00:00:00.000 5003 500 60 2011-10-26 00:00:00.000 5604 500 60 2011-11-11 00:00:00.000 560(4 行受影响)*/godrop table tb帮你顶一下. 谁都是从不会来的.可以采用存储过程来处理,参考:create table tb(id int,购买点数 int,赠送点数 int,赠送日期 datetime,可用点数 as (case when datediff(d,赠送日期,getdate())<=30 then 购买点数+赠送点数 else 购买点数 end))goinsert into tb(id,购买点数,赠送点数,赠送日期) select 1,500,60,'2011-10-11'insert into tb(id,购买点数,赠送点数,赠送日期) select 2,500,60,'2011-10-18'insert into tb(id,购买点数,赠送点数,赠送日期) select 3,500,60,'2011-10-26'insert into tb(id,购买点数,赠送点数,赠送日期) select 4,500,60,'2011-11-11'go--扣点:create procedure updatetb(@id int,@p int)asupdate tb set 赠送点数=赠送点数-(case when datediff(d,赠送日期,getdate())<=30 and @p<赠送点数 then @p else 赠送点数 end),购买点数=购买点数-(case when datediff(d,赠送日期,getdate())<=30 and @p<赠送点数 then 0 when datediff(d,赠送日期,getdate())<=30 and @p>赠送点数 then @p-赠送点数 else @p end)where id=@idgoexec updatetb 2,100exec updatetb 3,100exec updatetb 4,45exec updatetb 1,45select * from tb/*id 购买点数 赠送点数 赠送日期 可用点数----------- ----------- ----------- ----------------------- -----------1 455 0 2011-10-11 00:00:00.000 4552 400 0 2011-10-18 00:00:00.000 4003 460 0 2011-10-26 00:00:00.000 4604 500 15 2011-11-11 00:00:00.000 515(4 行受影响)*/godrop table tbdrop procedure updatetb 非常感谢qianjin036a,经你热心的讲解我大约都有了思路了。我先试试看,一伙就结贴.谢谢回贴的众高手们。 页面第一次加载时可以执行客户端事件,从服务器再回传后就不执行了。谢谢! SQL SERVER中的存储过程查询问题 if(ViewState["doSearch"]!=null) VB写法 如何设置虚拟主机的连接数? 问个简单的问题,关于业务层、规则层和界面层的关联。 一个关于框架传值的问题!(在线) 关于读取图片的问题!! 哪里有用asp.net,C#编的网上考试系统下载,急!急!急! 动态加载用户控件的布局问题 新手提问 请教各位一个问题! asp.net iis7转换文档实现在线预览问题,帮我分析呀…
--在扣点的时候,先扣赠送点数
create table tb(id int,购买点数 int,赠送点数 int,赠送日期 datetime,
可用点数 as (case when datediff(d,赠送日期,getdate())<=30 then 购买点数+赠送点数 else 购买点数 end))
go
insert into tb(id,购买点数,赠送点数,赠送日期) select 1,500,60,'2011-10-11'
insert into tb(id,购买点数,赠送点数,赠送日期) select 2,500,60,'2011-10-18'
insert into tb(id,购买点数,赠送点数,赠送日期) select 3,500,60,'2011-10-26'
insert into tb(id,购买点数,赠送点数,赠送日期) select 4,500,60,'2011-11-11'
go
select * from tb
/*
id 购买点数 赠送点数 赠送日期 可用点数
----------- ----------- ----------- ----------------------- -----------
1 500 60 2011-10-11 00:00:00.000 500
2 500 60 2011-10-18 00:00:00.000 500
3 500 60 2011-10-26 00:00:00.000 560
4 500 60 2011-11-11 00:00:00.000 560(4 行受影响)*/
go
drop table tb
帮你顶一下.
可以采用存储过程来处理,参考:create table tb(id int,购买点数 int,赠送点数 int,赠送日期 datetime,
可用点数 as (case when datediff(d,赠送日期,getdate())<=30 then 购买点数+赠送点数 else 购买点数 end))
go
insert into tb(id,购买点数,赠送点数,赠送日期) select 1,500,60,'2011-10-11'
insert into tb(id,购买点数,赠送点数,赠送日期) select 2,500,60,'2011-10-18'
insert into tb(id,购买点数,赠送点数,赠送日期) select 3,500,60,'2011-10-26'
insert into tb(id,购买点数,赠送点数,赠送日期) select 4,500,60,'2011-11-11'
go
--扣点:
create procedure updatetb(@id int,@p int)
as
update tb set
赠送点数=赠送点数-(case when datediff(d,赠送日期,getdate())<=30 and @p<赠送点数 then @p
else 赠送点数
end),
购买点数=购买点数-(case when datediff(d,赠送日期,getdate())<=30 and @p<赠送点数 then 0
when datediff(d,赠送日期,getdate())<=30 and @p>赠送点数 then @p-赠送点数
else @p
end)
where id=@id
go
exec updatetb 2,100
exec updatetb 3,100
exec updatetb 4,45
exec updatetb 1,45select * from tb
/*
id 购买点数 赠送点数 赠送日期 可用点数
----------- ----------- ----------- ----------------------- -----------
1 455 0 2011-10-11 00:00:00.000 455
2 400 0 2011-10-18 00:00:00.000 400
3 460 0 2011-10-26 00:00:00.000 460
4 500 15 2011-11-11 00:00:00.000 515(4 行受影响)*/
go
drop table tb
drop procedure updatetb