update web_user_doorguest set current_datetime=factdatetime,lev=lev+1, [force]=[force]+case when @rand <60 then 1 else case when @rand <85 and @rand> 60 then 2 else 3 end end
,[recovery]=[recovery]+case when @rand1 <50 then 0 else 1 end ,
[agility]=[agility]+case when @rand2 <50 then 0 else 1 end
,[mind]=[mind]+case when @rand3 <50 then 0 else 1 end ,
[life]=[life]+case when @rand4 <50 then 50 else case when @rand <85 and @rand> 50 then 52 else 55 end end where [id][email protected]
发现case when 语句,有时会出现问题,就是有的会不执行.
例如force列肯定会加一个数,但有时就不加..是放在服务器上执行.
另外..
update web_user_doorguest set web_user_doorguest.current_life=(case when arm_count> 0 then b.current_life else 0 end),web_user_doorguest.state=(case when arm_count> 0 then 1 else 5 end)
from #war_temp b where web_user_doorguest.id=b.id and b.type_id=20
还会出现current_life=0,但是state=1的情况.
------解决方案--------------------
update web_user_doorguest set current_datetime=factdatetime,lev=lev+1, [force]=[force]+case when @rand <60 then 1 else case when @rand <85 and @rand> 60 then 2 else 3 end end
,[recovery]=[recovery]+case when @rand1 <50 then 0 else 1 end ,
[agility]=[agility]+case when @rand2 <50 then 0 else 1 end
,[mind]=[mind]+case when @rand3 <50 then 0 else 1 end ,
[life]=[life]+case when @rand4 <50 then 50 else case when @rand <85 and @rand> 50 then 52 else 55 end end where [id][email protected]
发现case when 语句,有时会出现问题,就是有的会不执行.
---------------
看語句應該不會。
因為你的都有else的,不會出現沒有更新的情況。
------解决方案--------------------
1 是不是整个语句执行失败了,应该不是case when的问题
2 是不是没有临时表对应的id,或者临时表的type_id <> 20 当然不更新
------解决方案--------------------
语句上没问题,先看看服务器端SQL打补丁的情况吧,有时候不打补丁出现的问题千奇百怪。
------解决方案--------------------
Microsoft SQL Server 系统版本信息查询语句
Select @@Version;
然后按执行;
这时会返回SQL的版本信息,如下:
Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 3)
其中的8.00.760就是SQL Server的版本和补丁号。对应关系如下:
8.00.194 -SQL Server 2000 RTM
8.00.384 -(SP1)
8.00.534 -(SP2)
8.00.760 -(SP3)
8.00.2039-(SP4)
------解决方案--------------------
1.使用 select @@VERSION
以下是我机器上的SP4版本信息
Microsoft SQL Server 2000 - 8.00.2039 (Intel X86)
May 3 2005 23:18:38
Copyright (c) 1988-2003 Microsoft Corporation
Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
2.使用exec master..xp_msver
------解决方案--------------------
和版本 sp都没关系
理解问题,
current_life=(case when arm_count> 0 then b.current_life else 0 end)
的结果 current_life=0有两种可能
1 arm_count> 0 and b.current_life=0