不實用,之所以寫,一為領導的要求,另外也熟悉下寫**,**多寫點也沒什麼壞處,並且寫了之後發現臨時表還挺容易用的,資料量小的時候,並顯不出臨時表速度不行的問題.
**如下:
set quoted_identifier on
goset 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
asset 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,@fte*** 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)
endif @intcashamount2+@intwantedamount2<0
begin
set @ftemp=-@intcashamount2/@intwantedamount2
insert into #temp1 values(@ftemp)
endif @intcashamount3+@intwantedamount3<0
begin
set @ftemp=-@intcashamount3/@intwantedamount3
insert into #temp1 values(@ftemp)
endif @intcashamount4+@intwantedamount4<0
begin
set @ftemp=-@intcashamount4/@intwantedamount4
insert into #temp1 values(@ftemp)
endset @ftemp=(select min(@ftemp) from #temp)
drop table #temp1
if @ftemp<@frate
begin
set @frate=@ftemp
set @bneedrecalc=1
endif @bneedrecalc=1
begin
set @intwantedamount1=@intwantedamount1*@frate
set @intwantedamount2=@intwantedamount2*@frate
set @intwantedamount3=@intwantedamount3*@frate
set @intwantedamount4=@intwantedamount4*@frate
endbegin 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
goset quoted_identifier off
goset ansi_nulls on
go
乙個四使用者資訊同步更新的儲存過程
不實用,之所以寫,一為領導的要求,另外也熟悉下寫 多寫點也沒什麼壞處,並且寫了之後發現臨時表還挺容易用的,資料量小的時候,並顯不出臨時表速度不行的問題 如下 set quoted identifier on goset ansi nulls on go name 遊戲中四人資料同時更新 design...
乙個儲存使用者資訊的類,支援單一登入
看到這裡很多問如何實現單點登入,本人根據自己的經驗,提供乙個實現單點登入的類。支援web和winfrom,測試成功。利用雜湊表,作為儲存登入使用者的佇列 private static hashtable m userlist private static timespan m tssub new t...
C 乙個儲存使用者資訊的類,支援單點登入
看到這裡很多問如何實現單點登入,本人根據自己的經驗,提供乙個實現單點登入的類。支援web和winfrom,測試成功。設定雜湊表初始化為同步封裝 為了執行緒安全 m userlist hashtable.synchronized new hashtable 設定了幾種方式 1 登入資訊在資料庫中驗證成...