一个四用户信息同步更新的存储过程

80酷酷网    80kuku.com

  存储过程

不实用,之所以写,一为领导的要求,另外也熟悉下写代码,代码多写点也没什么坏处,并且写了之后发现临时表还挺容易用的,数据量小的时候,并显不出临时表速度不行的问题.

代码如下:

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
/*
Name:游戏中四人数据同时更新
Designed By :whbo
Designed At :2005-10-12
Modified By :
Modified At :
Memo:
*/

ALTER   PROC [PrMoney_UpdateCash2]
chvModeName varchar(16),
chvSourceName varchar(64),
chvRemark varchar(128),
intUserID1 int,
intUserID2 int,
intUserID3 int,
intUserID4 int,
intWantedAmount1 int,
intWantedAmount2 int,
intWantedAmount3 int,
intWantedAmount4 int,
chvIPAddress1 varchar(15),
chvIPAddress2 varchar(15),
chvIPAddress3 varchar(15),
chvIPAddress4 varchar(15),
inyLog tinyint
as
set nocount on
set xact_abort on
Declare intCashAmount1 int,intCashAmount2 int,intCashAmount3 int,intCashAmount4 int
Declare FRate float,FTemp float
Declare bNeedReCalc bit  --0:不用重算 ;1:需要重算
set FRate=1.0
set FTemp=1.0
set bNeedReCalc=0
Declare FTemp1 float,FTemp2 float,FTemp3 float,FTemp4 float

--这里要注意,更新用户现金取数据库中的数据,跟游戏服务器能否保持一致
--取得用户现金
select intCashAmount1=[Amount] from [dbo].[Money] where [UserID]=intUserID1
select intCashAmount2=[Amount] from [dbo].[Money] where [UserID]=intUserID2
select intCashAmount3=[Amount] from [dbo].[Money] where [UserID]=intUserID3
select intCashAmount4=[Amount] from [dbo].[Money] where [UserID]=intUserID4

Create Table #Temp1(TTemp float)

if intCashAmount1+intWantedAmount1<0
 begin
  set FTemp=-intCashAmount1/intWantedAmount1
  insert into #temp1 values(FTemp)
 end

if intCashAmount2+intWantedAmount2<0
 begin
  set FTemp=-intCashAmount2/intWantedAmount2
  insert into #temp1 values(FTemp)
 end

if intCashAmount3+intWantedAmount3<0
 begin
  set FTemp=-intCashAmount3/intWantedAmount3
  insert into #temp1 values(FTemp)
 end

if intCashAmount4+intWantedAmount4<0
 begin
  set FTemp=-intCashAmount4/intWantedAmount4
  insert into #temp1 values(FTemp)
 end

set FTemp=(select min(FTemp) from #temp)
drop table #temp1

if FTemp<FRate
begin
 set FRate=FTemp
 set BNeedReCalc=1
end

if BNeedReCalc=1
begin
 set intWantedAmount1=intWantedAmount1*FRate
 set intWantedAmount2=intWantedAmount2*FRate
 set intWantedAmount3=intWantedAmount3*FRate
 set intWantedAmount4=intWantedAmount4*FRate
end

begin tran
exec [prMoney_UpdateCash]
 chvModeName,   -- 通过什么方式,如'WEB'、'GameServer'等
 chvSourceName,  -- 方式的源,如'金币麻将服务器'、'虚拟股市'等
 chvRemark,  -- 其它信息 注释.
 intUserID1,    -- 用户ID
 0, -- 相关的用户ID
 intWantedAmount1,   -- 希望更新的数量(>0 加金, <0 扣金)
 0,    -- 税金(税金>0,要在现金中扣除,游戏服务器可以置为0)
 chvIPAddress1,  -- IP地址
 0, -- 机器码
 1    -- 是否做Log,如果>0,则表示做Log,否则不做Log

exec [prMoney_UpdateCash]
 chvModeName,   -- 通过什么方式,如'WEB'、'GameServer'等
 chvSourceName,  -- 方式的源,如'金币麻将服务器'、'虚拟股市'等
 chvRemark,  -- 其它信息 注释.
 intUserID2,    -- 用户ID
 0, -- 相关的用户ID
 intWantedAmount2,   -- 希望更新的数量(>0 加金, <0 扣金)
 0,    -- 税金(税金>0,要在现金中扣除,游戏服务器可以置为0)
 chvIPAddress2,  -- IP地址
 0, -- 机器码
 1    -- 是否做Log,如果>0,则表示做Log,否则不做Log

exec [prMoney_UpdateCash]
 chvModeName,   -- 通过什么方式,如'WEB'、'GameServer'等
 chvSourceName,  -- 方式的源,如'金币麻将服务器'、'虚拟股市'等
 chvRemark,  -- 其它信息 注释.
 intUserID3,    -- 用户ID
 0, -- 相关的用户ID
 intWantedAmount3,   -- 希望更新的数量(>0 加金, <0 扣金)
 0,    -- 税金(税金>0,要在现金中扣除,游戏服务器可以置为0)
 chvIPAddress3,  -- IP地址
 0, -- 机器码
 1    -- 是否做Log,如果>0,则表示做Log,否则不做Log
exec [prMoney_UpdateCash]
 chvModeName,   -- 通过什么方式,如'WEB'、'GameServer'等
 chvSourceName,  -- 方式的源,如'金币麻将服务器'、'虚拟股市'等
 chvRemark,  -- 其它信息 注释.
 intUserID4,    -- 用户ID
 0, -- 相关的用户ID
 intWantedAmount4,   -- 希望更新的数量(>0 加金, <0 扣金)
 0,    -- 税金(税金>0,要在现金中扣除,游戏服务器可以置为0)
 chvIPAddress4,  -- IP地址
 0, -- 机器码
 1    -- 是否做Log,如果>0,则表示做Log,否则不做Log
commit tran
return 1

GO
SET QUOTED_IDENTIFIER OFF
GO
SET AN

分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: